home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / midi / gfft.lha / gfft-2.03 / gfft.help < prev    next >
Text File  |  1995-02-12  |  176KB  |  3,989 lines

  1. ?preface
  2.  
  3.  This file is intended for display by the gfft 'help' facilities.  However,
  4.  it also currently constitutes the most complete gfft manual, so, if you
  5.  really want to read a lot about GFFT, you might want to read it with
  6.  MORE or search for key strings using your favorite searching,
  7.  text-editing, or searching program.
  8.  
  9.  The format is intended to be compatible with that used by the GNUPLOT
  10.  help/manual file, so one day I will be able to print out hardcopy
  11.  documents my massaging this file and using troff, tex, postscript, etc.
  12.  (A suitable massage might even render it in AmigaGUIDE format).
  13.  
  14.  
  15. ?organization
  16.  
  17.  This document is organized as follows:
  18.  
  19.      Preface
  20.      Organization
  21.      Introduction
  22.      General Topics
  23.      Workbench Gadgets
  24.      CLI Commands
  25.      Appendixes
  26.  
  27.  
  28. ?introduction 
  29.  
  30.  (In the following discussion, additional help topics are highlighted with
  31.  angle brackets like this: >introduction<.  A list of additional help
  32.  >topics< is also available.  These topics may be displayed using the HELP
  33.  requester or command.)
  34.  
  35.  GFFT is an FFT-based spectrum analysis program with many features.  It is
  36.  intended to provide higher resolution and higher quality than most
  37.  real-time FFT-based spectrum analyzers, and, in conjunction with a
  38.  suitable plotting program (such as GNUPLOT, a separate program written by
  39.  others which GFFT can invoke and control) it can produce high quality
  40.  spectrum plots on screen or paper (including the output of Postscript or
  41.  TeX files if desired).  GFFT can be run either through a Workbench
  42.  graphical interface or from the CLI in either interactive or batch (single
  43.  command) modes.  
  44.  
  45.  GFFT can also do such things as control GNUPLOT to plot several spectra on
  46.  the same screen or page (see >Workbench Plot-Combine< or >CombinePlots<),
  47.  and re-plot previously stored spectrum data files (see >Workbench
  48.  Spectrum-File-Open< or >Open<).
  49.  
  50.  
  51.  WORKBENCH USAGE
  52.  ---------------
  53.  
  54.  From the Workbench, GFFT may be started by double-clicking on its icon.
  55.  The GFFT Dialog Window then appears.  Within the GFFT Dialog Window, you
  56.  may select sample files to analyze either by using the ASL file requester
  57.  (which comes up after you click on the 'SELECT' gadget), or by entering
  58.  their name(s) into the 'Sample File' string gadget.  Note that the ASL
  59.  file requester requires Workbench 2.0 or higher.
  60.  
  61.  If you prefer, you may use 'extended selection' to select one or more
  62.  sample files in advance.  This is done by first single-clicking on the
  63.  GFFT icon, and then holding down the Shift key while clicking on a series
  64.  of one or more icons representing the sample files you wish to analyze.
  65.  You double-click on the last sample icon selected to start GFFT.
  66.  
  67.  GFFT is also distributed with a sample whose icon automatically invokes
  68.  GFFT (i.e., the icon is a project icon which specifies GFFT as its tool).
  69.  
  70.  Within the GFFT dialog window, you use the 'OK' button to actually begin a
  71.  spectrum analysis, the 'NEXT' button to advance to the next selected
  72.  sample file (if more than one was selected on the Workbench), the close
  73.  gadget (at the top left of the window border) to terminate GFFT, and the
  74.  'CLI' button to continue the GFFT session in CLI mode (if you need to
  75.  activate one of the few features available only in the GFFT CLI
  76.  interface).  (You can then return to the GFFT Dialog Window by giving the
  77.  'Workbench' command.)  There are also many other gadgets in the dialog
  78.  window which allow you to view and adjust parameters and use other
  79.  features.  Notably, the '3D-Time' button brings up a requester allowing
  80.  you to do 3D analysis using time as the third dimension, and the 'CAL'
  81.  button brings up a requester allowing you to specify one or more
  82.  calibration files to be applied to the spectral data.
  83.  
  84.  Help for any gadget in the GFFT Dialog Window may be displayed by holding
  85.  the CTRL key when clicking on that gadget.  (String gadgets may need to be
  86.  de-selected first.)  Additional information may be displayed by using the
  87.  Help Requester which comes up when you click on the 'HELP' button.
  88.  
  89.  If you click the Version/Copyright button, a requester providing
  90.  information about the author, your rights to modify and distribute GFFT,
  91.  additional services available, disclaimers, and so on will be displayed.
  92.  
  93.  The GFFT icon or the sample icon may specify tooltypes which are treated
  94.  as GFFT commands to be executed before the the GFFT Dialog Window is
  95.  displayed.  The order of execution is as follows: (1) execute the .gfft
  96.  startup file (see below), (2) execute tooltypes in the GFFT icon, (3)
  97.  execute tooltypes for the sample icon.  If more than one sample icon was
  98.  selected, the tooltypes for each sample icon are processed just before the
  99.  dialog session for that sample is started.  GFFT tooltypes are ignored if
  100.  GFFT is started from the CLI.  Tooltype may be specified in the typical
  101.  "tooltype" format, for example:
  102.  
  103.      bins=1024
  104.  
  105.  Tooltypes beginning with semicolon (;), pound sign (#), exclamation point
  106.  (!), or left parenthesis (() are ignored by GFFT, as are usual EXEC
  107.  tooltypes (they are processed by EXEC before GFFT starts), and the
  108.  tooltype 'FILETYPE.'  You will some examples of useful GFFT tooltypes
  109.  in the default GFFT.info icon.  (They are commented out by default.)
  110.  
  111.  
  112.  CLI USAGE
  113.  ---------
  114.  
  115.  From the CLI, GFFT may be run as an >interactive< program which prompts
  116.  for each argument or command, or as a >batch< program for which all
  117.  arguments and commands have been specified as command-line arguments.  
  118.  
  119.  If no arguments are given, or, if the WORKBENCH argument is given, GFFT
  120.  will start in Workbench mode.
  121.  
  122.  If the CLI argument is given, GFFT will start in CLI-interactive mode.
  123.  
  124.  Otherwise if one or more arguments are given, GFFT will run in CLI-batch
  125.  mode.
  126.  
  127.  For more information about the CLI commands available in GFFT, give the
  128.  'Help' command while running GFFT in CLI-interactive mode, or give the
  129.  batch mode question-mark (?) command.
  130.  
  131.     shell> gfft ?
  132.  
  133.     OR
  134.  
  135.     sys> gfft CLI
  136.  
  137.     gfft> help
  138.  
  139.  From the Workbench, you can go back to the CLI session (if it was
  140.  interactive) by clicking the CLI button.
  141.  
  142.  sys> gfft
  143.  
  144.  [partial workbench session ended with click on CLI button]
  145.  
  146.  gfft> ok
  147.  
  148.  gfft> quit
  149.  
  150.  
  151.  Since GFFT is designed to work in conjunction with GNUPLOT, you should
  152.  install GNUPLOT before running GFFT.  You should also follow the other
  153.  instructions included in your GFFT distribution in the file named
  154.  INSTALLATION.
  155.  
  156.  
  157.  STARTUP FILE
  158.  ------------
  159.  
  160.  When starting, GFFT looks for a file named .gfft either in the current
  161.  directory (which is the one in which GFFT itself is found, if started from
  162.  the Workbench), or if not found there, in the system S: directory.  This
  163.  file can contain a series of GFFT CLI commands, one per line.  Lines
  164.  beginning with ; # or ! are ignored, as are blank lines.  This file is
  165.  executed before GFFT does anything else.  By using a .gfft file, you can
  166.  'customize' the GFFT defaults and other features to match your application
  167.  or environment.
  168.  
  169.  
  170.  HOW TO LEARN MORE
  171.  -----------------
  172.  
  173.  If spectrum analysis is new to you, consider reading the HELP topic
  174.  >data-windowing<, but don't be discouraged if it is a little hard to
  175.  understand at first.
  176.  
  177.  Also, check the >References< topic.
  178.  
  179.  
  180. ?General-Topics
  181. ?Topics
  182.  
  183.  Help is also available for any additional topic named <topic> by entering
  184.  
  185.      help <topic>
  186.  
  187.  From the WORKBENCH, help is available for these topics through the
  188.  HELP requester which comes up after the HELP button has been clicked.
  189.  
  190.  The additional topics are:
  191.  
  192.  introduction        topics            interactive-CLI        batch
  193.  code contributors   financial contributors      idea contributors
  194.  accuracy            speed             memory    references
  195.  floating-point-errors                 CLI-commands
  196.  GFFT-Dialog-Window                    Workbench-Message-Display
  197.  More-About-Bins     temporary-files   Data-Windowing
  198.  zoom
  199.  
  200. ?zoom
  201.  
  202.  GNUPLOT, which GFFT uses, does not have an interactive 'zoom' capability.
  203.  But, using GFFT it is possible (if not extremely fast) to zoom in or out
  204.  from a spectrum using the following gadgets:
  205.  
  206.  Low Freq (Low Frequency)
  207.  High Freq (High Frequency)
  208.  Low Y
  209.  High Y
  210.  
  211.  (The 'Low Y' and 'High Y' gadgets are available in the Calibration and
  212.  Magnification requester which comes up when you click on the 'Cal & Mag'
  213.  button.)
  214.  
  215.  Once you modify one or more of these parameters to explore the part of the
  216.  spectrum you are most interested in, you need not repeat the entire
  217.  analysis; it is only necessary to repeat the plotting phase, and this is
  218.  accomplished through using the RePlot button.
  219.  
  220.  If you are using the interactive CLI interface, the corresponding commands
  221.  are LowFrequency, HighFrequency, LowY, HighY, and RePlot.
  222.  
  223.  See the help information for these buttons or commands for further
  224.  discussion. 
  225.  
  226.  
  227. ?More-About-Bins
  228. ?Data-Windowing
  229.  
  230.  [This is somewhat technical, but may help you understand some of the
  231.  parameters in GFFT.  If you don't understand it, don't worry; you can
  232.  usually just use the GFFT defaults, adjusting the Bins parameter downward
  233.  to about 1024 or less if you are short on memory.]
  234.  
  235.  When dealing with functions that are sampled at evenly spaced intervals in
  236.  time, it is appropriate to use the 'discrete Fourier transforms.'  These
  237.  equations map N complex numbers from the 'time domain' to the 'frequency
  238.  domain' (and back again).  The 'fast Fourier' techniques use various
  239.  symmetries to reduce the computation times from O(N times N) to O(N log
  240.  N), but one price paid for this is that N must be a integer power of 2.
  241.  
  242.  This is also true if our N is the number of real sampled data points, or
  243.  one-sided (positive frequency only) frequency 'bins,' though it will
  244.  take 2 real data points to yield an amplitude estimate at each positive
  245.  frequency (which has been averaged with the amplitude at a corresponding
  246.  negative frequency).
  247.  
  248.  Another problem with Fourier transformation 'periodograms' (arrays of
  249.  frequency values computed from time-sampled values) is that the variance
  250.  (random error) can be quite high.
  251.  
  252.  We can deal with both of these problems by using data windowing.  Rather
  253.  than choosing the largest N (being a power of 2) that we could use with
  254.  our number of real sampled data points, we may choose a smaller N (still
  255.  being a power of 2), compute a series of periodograms, one from each
  256.  successive segment or 'window' of N times 2 data points, and then average
  257.  their results.  This reduces the variance considerably (at the price of
  258.  lowering the number of frequencies in the averaged periodogram, which is
  259.  frequently not a problem).  Next, we can overlap the last full window with
  260.  another window such that any remainder of data points are accounted for.
  261.  In fact, there is no reason why we can't overlap ALL of the windows by
  262.  50%, as that can reduce the total variance 9/11 as much as having twice as
  263.  much data to average over to begin with (see Press, et.  al, 1988, page
  264.  445).
  265.  
  266.  Unfortunately, there are some problems with having N's of finite length,
  267.  which is even exacerbated by averaging periodograms from smaller windows.
  268.  (Ideally, we would have an infinite N.)  We tend to get spurious
  269.  'sidelobes' around each spectral peak.  This occurs because the window
  270.  truncates the real signal, usually at some non-zero point.  Sidelobing
  271.  (and other artifacts) can be reduced by using more sophisticated windows.
  272.  
  273.  The trivial window type (assumed above) is rectangular, we simply take the
  274.  data points in each window as-is.  This is the same as if we multiplied
  275.  each of the data points within our window by 1, and all data points
  276.  outside the window by zero.  There are a huge variety of window functions
  277.  which begin at a low multiplier or zero at the beginning of the window,
  278.  ramp up to 1 in the middle, and then return to a low multiplier or zero at
  279.  the end.  Each of these window 'types' has tradeoffs, but the Rectangle
  280.  window has the worst tendency to generate sidelobes because it truncates
  281.  the signal on both sides most abruptly.
  282.  
  283.  GFFT includes the following window types.  
  284.  
  285.      >Rectangle<
  286.      >Triangle<
  287.      >Parzen<
  288.      >Welch<
  289.      >Hann<
  290.      >Hamming<
  291.      >74-dB-Blackman-Harris<
  292.      >92-dB-Blackman-Harris<
  293.  
  294.  These are listed roughly in order of increasing ability to suppress
  295.  spurious sidelobes.
  296.  
  297.  Refer to the HELP message provided for each one of these for further
  298.  information.  See also the HELP messages for >Bins<, >Overlap<, and
  299.  >Parseval<.
  300.  
  301.  
  302. ?Accuracy
  303. ?Speed
  304. ?Floating-Point-Errors
  305.  
  306.  GFFT uses double precision floating point for the values related to time
  307.  and frequency, and single precision for the values related to amplitude
  308.  (or power, etc.).  In the standard version, the Motorola Fast Floating
  309.  Point (FFP) math library is used--this reduces the precision of double
  310.  precision to approximately that of single precision, and (seems to) reduce
  311.  the precision of single precision somewhat also.  The benefit is about a
  312.  4x improvement in overall (!) performance without a floating point unit
  313.  (FPU).  Despite limited precision, I believe FFP is good enough for most
  314.  graphical purposes, and it is probably superior in accuracy to using
  315.  scaled integer arithmetic.
  316.  
  317.  On systems with an FPU, the GFFT-FPU version is another 10% or more
  318.  faster, and it doesn't compromise the double precision and single
  319.  precision accuracy in any way.
  320.  
  321.  The standard FFP version doesn't handle errors such as divide by zero very
  322.  well, but GFFT attempts to detect problems like this before they would
  323.  occur so they shouldn't occur often.
  324.  
  325.  The FPU version uses in-line FPU code, which I have found to be much
  326.  faster than using the IEEE library.  Even on a machine with an FPU, using
  327.  the IEEE library is actually slower than using the FFP library which
  328.  doesn't even use the FPU.
  329.  
  330.  
  331. ?Memory
  332. ?More-About-Bins
  333. ?Temporary-Files
  334.  
  335.  The amount of memory GFFT allocates depends mainly on the number of Bins
  336.  used.  If you are having trouble with running out of memory, try using a
  337.  smaller number of bins.  By default, GFFT will use as many bins as can be
  338.  meaningfully used on the sample file being analyzed.  Use the Bins command
  339.  or the Bins gadget to adjust the set the number of bins.  1024 is a
  340.  typical number of bins people use, though I prefer to use more.  (The
  341.  number of bins determines your frequency resolution.  However, when fewer
  342.  bins are used, more averaging is done, so the results may be more
  343.  accurate.  GFFT will always try to use all data present in the most
  344.  intensive way, unless limited by options such as Frames and NoOverlap.)
  345.  Note that the number of bins must be a power of two, but GFFT will round
  346.  up to the next power of two if you specify a value which is not a power of
  347.  two.
  348.  
  349.  There is also a 'Savememory' command available from the CLI which will
  350.  reduce the dynamic memory requirements of GFFT somewhat, while increasing
  351.  the fft computation times slightly on most processors.  The difference in
  352.  execution time is barely measurable in most cases.
  353.  
  354.  GFFT also stores temporary command files in RAM: and temporary data files
  355.  in T:.  During a GFFT session, temporary data files may accumulate in T:,
  356.  and thereby fill up memory (if T: is assigned to RAM:T, as is typically
  357.  done.)  You may reduce the memory requirements for temporary data files by
  358.  reassigning T: to your harddrive, as in any of the following examples (use
  359.  whichever is more appropriate):
  360.  
  361.      Assign t: dh0:t
  362.      Assign t: dh1:t
  363.      Assign t: work:t
  364.      Assign t: df0:t
  365.  
  366.  Alternatively, you can purge unused files from T: as necessary.  Upon
  367.  termination, GFFT will delete all temporary data files from T: for you.
  368.  
  369.  You can also choose to use named data files (using the Write command or
  370.  the Spectrum File gadget) instead of temporary data files, and store them
  371.  in particular directories on you harddrive or floppy disk.  In this case,
  372.  temporary data files will not be used.
  373.  
  374.  The temporary command files stored in RAM: are so small as to be of little
  375.  consequence.  They are deleted upon the termination of GFFT.
  376.  
  377.  GFFT may leave some extra libraries in ram upon termination.  If you are
  378.  very short of memory, you may choose to use the following command (in
  379.  AmigaDOS 2.0 and later) to remove them after terminating GFFT:
  380.  
  381.      Avail /flush
  382.  
  383.  
  384. ?Interactive-CLI
  385.  
  386.  To run GFFT in the CLI 'interactive' mode, simply enter the command 'GFFT
  387.  CLI' (without the apostrophes) at you shell command prompt.  If you
  388.  specify any other arguments in the GFFT command line, GFFT will start in
  389.  'batch' mode instead.  For example:
  390.  
  391.  shell> gfft CLI
  392.  
  393.  GFFT> read pianolowc.iff
  394.  GFFT> ok
  395.  
  396.  [A spectrum plot is shown.]
  397.  
  398.  GFFT> quit
  399.  
  400.  shell>
  401.  
  402.  In interactive mode, GFFT will display a verbose header with copyright and
  403.  other information, and then begin prompting for additional commands with a
  404.  GFFT> prompt.  If you would like a list of available commands, enter the
  405.  'help' command.  Note that any command may be abbreviated to its minimum
  406.  unambiguous string, and GFFT is not case sensitive regarding commands.
  407.  Here is a sample session:
  408.  
  409.     GFFT> read piano.iff
  410.     GFFT> ok
  411.  
  412.  The OK command (which has the alias GO) actually starts the fft
  413.  processing.  If no file has been specified, or there is other incomplete
  414.  or invalid information, GFFT will give an error message and return another
  415.  prompt, so that you may make corrections.  Note that if the input file is
  416.  unformatted, you must specify the sampling rate using the 'rate' command.
  417.  For large sample files, it is also advisable to specify a specific number
  418.  of bins with the 'bins' command, or else GFFT will attempt to use the
  419.  maximum number of bins that could be useful with the number of data points
  420.  (or 'frames') in the file and other parameters.  To see a list of most of
  421.  the current parameter settings, use the 'ShowSettings' command.
  422.  
  423.  In interactive mode, the Plot option is turned on by default.  If you do
  424.  not specify a spectrum file with the Write command, GFFT will create (but
  425.  not delete) a temporary file for you, and run GNUPLOT automatically to
  426.  plot the spectrum when it is completed.  Alternatively, you can specify a
  427.  file to write the results to using the Write command, and disable Plot
  428.  mode with the NoPlot command if you didn't want to see the plot now.
  429.  
  430.  Most commands actually set parameters rather than initiating any
  431.  particular action.  However, it is not necessary (or possible, currently)
  432.  to use an explicit 'set' command; it is just implied.  Thus, to enable
  433.  plot mode, you enter the command 'plot' instead of 'set plot mode.'  Then,
  434.  plotting will be performed during the execution of the 'OK' command.
  435.  
  436.  
  437. ?Batch-Mode
  438. ?Batch
  439.  
  440.  To run GFFT in batch mode, enter the command 'GFFT' followed by a series
  441.  of GFFT commands as they would be entered in 'interactive' mode.  A
  442.  fairly large number (around 30 or so) commands may be entered in this
  443.  fashion, on several lines (so long as you do not press RETURN unescaped).
  444.  When you have entered all the commands that you wish gfft to process,
  445.  enter RETURN.  GFFT will process all the commands possible, after
  446.  which your command prompt will be returned.
  447.  
  448.  You can get a list of the available GFFT commands in batch mode by using
  449.  the question-mark (?) command, i.e.:
  450.  
  451.      gfft ?
  452.  
  453.  Unlike 'interactive' and 'workbench' modes, plot mode is disabled by
  454.  default in batch mode.  You must specify 'plot' explicitly if you want a
  455.  plot to be created at the end of fft processing.
  456.  
  457.  Also, an 'OK' command is usually not required in batch mode; it is implied
  458.  by the end of the command list if there is a read not followed by an OK
  459.  command.
  460.  
  461.  Batch mode is intended to be an 'Amiga' compliant CLI mode (Commodore
  462.  discourages interactive CLI programs like GNUPLOT), and is particularly
  463.  useful for doing a series of analyses.  A command file may be written and
  464.  then executed as a CLI script if desired.  For example, you could write
  465.  a script like this:
  466.  
  467.      gfft read white write white.fft bins 8192 lowf 0 highf 200 psd
  468.      gfft read white append white.fft bins 2048 lowf 200 highf 400 psd
  469.      gfft read white append white.fft bins 1024 lowf 400 highf 800 psd
  470.      gfft read white append white.fft bins 512 lowf 800 highf 1600 psd
  471.      gfft read white append white.fft bins 256 lowf 1600 highf 3200 psd
  472.      gfft read white append white.fft bins 128 lowf 3200 highf 6400 psd
  473.      gfft read white append white.fft bins 64 lowf 6400 psd
  474.  
  475.  This would append a series of fft 'bands' to a output file named white.fft,
  476.  with successively lower resolution at higher frequencies (desireable for
  477.  logarithmic display of the frequency axis).  (Note that an alternative
  478.  approach would be to use 'SmoothingSegments' with 'LogX' enabled.)
  479.  
  480.  
  481. ?Workbench Low-Frequency
  482.  
  483.  The Low-Frequency gadget allows you to select the lowest frequency to be
  484.  output (and plotted, if applicable).  By default, GFFT outputs and plots
  485.  the lowest non-zero frequency, and this is shown in the gadget if it can
  486.  be computed.  You may enter zero or any integer or floating point number
  487.  into the Low-Frequency gadget.
  488.  
  489.  Although the FFT process yields a value for the 0 frequency (e.g. D.C.),
  490.  typical FFT analyzers do not display it because it may display some offset
  491.  caused by the sampler.  With GFFT, this is also the default, but you may
  492.  also choose to display the zero frequency by entering 0 into the
  493.  Low-Frequency gadget.
  494.  
  495.  If no Low-Frequency has been entered, GFFT will display the lowest
  496.  frequency which will be plotted for each file, which depends on the
  497.  sampling rate, number of bins, and other factors.  This default low
  498.  frequency is the same as the spacing between frequencies in the FFT, i.e.,
  499.  the frequency resolution.  
  500.  
  501.  Once you enter a new Low-Frequency it will remain in effect for the
  502.  current Sample File and any additional files processed in the same GFFT
  503.  session.  However, you may restore the default by deleting the number
  504.  shown in the Low-Frequency gadget and pressing RETURN.
  505.  
  506.  Note that a specified Low-Frequency is handled differently by the RePlot
  507.  button than by the OK and ReOutput buttons.  See the help for the RePlot
  508.  button for further details.
  509.  
  510.  
  511. ?Workbench High-Frequency
  512.  
  513.  The High-Frequency gadget allows you to select the highest frequency to be
  514.  output (and plotted, if applicable) up to the 'Nyquist frequency,' which
  515.  is one-half of the sampling rate.  Any positive number (integer or
  516.  floating point) may be given as an argument.  If you enter a number higher
  517.  than the Nyquist frequency, it will have no effect (except during RePlot,
  518.  see below).  If no number has been entered, the default high frequency--
  519.  the Nyquist frequency--is displayed if it can be computed.
  520.  
  521.  Once you enter a new high frequency it will remain in effect for the
  522.  current Sample File and any additional files processed in the same GFFT
  523.  session.  However, you may restore the default by deleting the number
  524.  shown in the High-Frequency gadget and pressing RETURN.
  525.  
  526.  Note that a specified high frequency is handled differently by the RePlot
  527.  button than by the OK and ReOutput buttons.  See the help for the RePlot
  528.  button for further details.
  529.  
  530.  
  531. ?Workbench Smoothing
  532.  
  533.  Using the Smoothing gadget, you can specify that the output be 'smoothed'
  534.  or averaged over a certain number of 'smoothing segments.'  To do this,
  535.  enter the number of segments you wish to used into the gadget.  (This
  536.  works best if the number of segments is much smaller than the number of
  537.  bins used).  The number of of segments you specify is used to span the
  538.  range from the lowest non-zero frequency to the Nyquist frequency.  To
  539.  cancel smoothing, press the NO button immediately to the right of the
  540.  smoothing gadget, or delete the number in the Smoothing gadget.
  541.  
  542.  Without smoothing, if you plot with a large number of bins, or with LogX
  543.  on, you may find that the left or right side of the scale 'blooms' with a
  544.  wide range of values.  Rather than 'pixel averaging,' GNUPLOT shows the
  545.  effect of plotting a line to each and every data point--even if many such
  546.  points occur within one vertical line of pixels.  SmoothingSegments can
  547.  be used to eliminate this 'blooming' effect, simulate 'pixel averaging,'
  548.  and give you a more easily interpretable curve (though some important
  549.  actual detail may be lost!).
  550.  
  551.  If LogX is enabled, the mesh applied to the output will be logarithmically
  552.  scaled.  The combination of using LogX, SmoothingSegments, and a extra
  553.  large number of Bins is especially recommended for analysis using random
  554.  noise (e.g. white or pink noise) and/or whenever LogX is used.
  555.  
  556.  The smoothing technique is very simple.  A mesh of smoothing segments is
  557.  laid on top of the FFT bins, and for each smoothing segment containing
  558.  one or more data points, the average Y (amplitude) and X (frequency) values
  559.  are computed, and these become the X and Y values that are written to the
  560.  output file.  If there is only one data point within a smoothing segment,
  561.  it is unchanged by this procedure.  If there is no data point within a
  562.  smoothing segment, no data point will be output.  
  563.  
  564.  (If LogX is enabled, it is very possible that there will not be as many
  565.  data points as the number of segments you have chosen.  For example, given
  566.  4096 bins and 400 smoothing segments, only about 225 points will actually
  567.  be produced because the actual data points at the lower frequencies are
  568.  farther apart than the smoothing segments, even though there are many
  569.  data points per segment at the higher frequencies.  This does not happen if
  570.  LogX is not enabled.)
  571.  
  572.  If SquaredSmoothing button (Sq) is selected, the averaging of the Y values
  573.  is done by taking the positive root of average of the sum of the squared Y
  574.  values.
  575.  
  576.  I am aware of much more sophisticated smoothing or 'convoluting'
  577.  procedures which may have greater theoretic validity (e.g., see S. P.
  578.  Lipschitz, T. C. Scott, and J. Vanderkooy, 'Increasing the Audio
  579.  Measurement Capability of Analyzers by Microcomputer Postprocessing,'
  580.  Journal of the Audio Engineering Society, Volume 33, Number 9, September
  581.  1985...their technique simulates 1/3 octave bandwidth digital filters
  582.  which is useful in that it supposedly approximates human auditory
  583.  limitations), but these are also much more complicated.  The present
  584.  technique is workable and useful, though it may be somewhat lacking in
  585.  theoretic validity (though it is not without precedent), and the results
  586.  should be interpreted with some caution (you are probably not seeing all
  587.  the real features that are there--but then that is true with any
  588.  smoothing technique).
  589.  
  590.  
  591. ?Workbench Smoothing-NO
  592.  
  593.  The 'Smoothing-NO' button cancels smoothing.  When clicked, any number you
  594.  may have entered into the smoothing gadget is cleared.  You can achieve
  595.  the same effect by deleting the number in the smoothing gadget.  By
  596.  default when GFFT is started, smoothing is turned off, and the
  597.  Smoothing-NO button will be selected.
  598.  
  599.  See help for the Smoothing gadget for more information about the smoothing
  600.  used by GFFT.
  601.  
  602.  
  603. ?Workbench Smoothing-Squared
  604.  
  605.  The Smoothing-Squared button changes the operation of the Smoothing gadget
  606.  (see) slightly.  It has no effect if smoothing segments are not being used.
  607.  This is a toggle button which can be clicked on or off, but it has no
  608.  effect unless a number of smoothing segments has been entered into the the
  609.  Smoothing gadget.
  610.  
  611.  With Smoothing-Squared selected, the averaging of the Y values is done by
  612.  taking the positive root of the average of the sum of the squared Y
  613.  values.
  614.  
  615.  I have found this to make a nearly negligible difference in practice, but
  616.  your experience may vary.  I'm not sure which averaging approach is more
  617.  'valid' (I suspect it depends on whether you are plotting logarithmically
  618.  or not).
  619.  
  620.  
  621. ?Workbench Mean
  622.  
  623.  The Mean button determines whether GFFT will write Mean (average) or
  624.  summed values.  By default, GFFT will write Mean values.  In other words,
  625.  by default, Root Mean Square (RMS) Amplitude or Mean Square (MS) Power
  626.  values will be written.
  627.  
  628.  I do not recommend the use of the 'summed' values (as with Mean
  629.  deactivated) except for special debugging purposes.
  630.  
  631.  
  632. ?Workbench More-Help
  633.  
  634.  Getting help for any button or string gadget in GFFT is easy...simply
  635.  click on that button or gadget while holding down the CTRL key.
  636.  
  637.  (The CTRL key is normally found to the left of the Caps Lock key.)
  638.  
  639.  There is one bug here.  If a STRING GADGET has ALREADY been activated, you
  640.  must deactivate it first before requesting help for it.  To do this,
  641.  simply click anywhere else on the window (such as on the window
  642.  background).  Then, you may click on the string gadget while holding the
  643.  CTRL key, and the help message will be displayed.  It is not necessary to
  644.  deselect ordinary buttons first.  Help is not available for the message
  645.  indicator on the bottom of the GFFT Dialog Window (sorry; I tried).
  646.  
  647.  If you would like more information about the author of GFFT, how you can
  648.  support GFFT development, your rights regarding the use and distribution
  649.  of GFFT, the disclaimer, and other related information, click on the
  650.  Version/Copyright button on the top of the main GFFT Dialog Window.  (Of
  651.  course, you must exit from this HELP requester first by clicking on the
  652.  '...OK' button on the bottom right.  
  653.  
  654.  The HELP requester also provides two other 'canned' messages which you may
  655.  display by clicking on the 'Intro' and 'Topics' buttons on the bottom row.
  656.  The message for 'Topics' is a list of additional topics.  You may enter
  657.  the name of any HELP topic into the string gadget and press RETURN.
  658.  
  659.  Note that each message will be displayed in its own window and runs in its
  660.  own shell process, and, if you re-size or move the windows, you may display
  661.  more than one message at the same time.  You may also use or even exit
  662.  from GFFT while still reading one or more help windows.  Isn't
  663.  multitasking wonderful?
  664.  
  665.  GFFT uses MORE to display help messages.  MORE must be installed either
  666.  in the usual place (sys:utilities), C:, or in the same directory as
  667.  GFFT in order to be used by GFFT.  Unfortunately, aliases for MORE
  668.  will not work.  However, if you would prefer to use some text reader
  669.  other than MORE, you can either create a link or a copy of that reader
  670.  in any of these three locations.  Links (made with the makelink) command
  671.  are preferable, as they take a minimum of storage, but they must be
  672.  on the same device or partition as the actual program itself.  A link
  673.  in the directory C: to a reader named MORE2 would be created with the
  674.  following command:
  675.  
  676.      makelink c:more c:more2
  677.  
  678.  
  679.  Running GFFT basically requires three steps: selecting a file, selecting
  680.  options (or just using the defaults), and then clicking the 'OK' button at
  681.  the bottom right of the GFFT dialog window.
  682.  
  683.  
  684. ?GFFT-Dialog-Window
  685.  
  686.  Almost everything in the GFFT dialog window is a button or string gadget.
  687.  One notable exception is the Message Display at the bottom.  This gives
  688.  information about the current GFFT operational status, and possibly
  689.  indicates what user action is currently most desireable.  (If an FFT
  690.  analysis is being performed, the message 'Performing FFT analysis...'
  691.  will be displayed.  This could take a considerable amount of time.  During
  692.  this time, you will should not attempt to operate on any other GFFT Dialog
  693.  Window gadgets.)
  694.  
  695.  When clicked, the Version/Copyright button at the top will bring up a
  696.  requester providing more information about the author of GFFT and the
  697.  copyright and disclaimer.
  698.  
  699.  For further information on the Message Display, refer to help topic
  700.  >Workbench-Message-Display<.
  701.  
  702.  
  703. ?Workbench 3D-Time
  704.  
  705.  The 3D-Time button brings up the 3D-Time requester which allows you to
  706.  set parameters associated with the display of how a spectrum varies over
  707.  time.  Further information is available through the 'Help' button in that
  708.  requester.
  709.  
  710.  
  711. ?Workbench 3D-Time Help
  712.  
  713.  The '3D-Time' facilities of GFFT are intended to enable you to show how a
  714.  spectrum varies with time.  GFFT is very flexible in how it enables you to
  715.  do this.  The results can also be plotted in 3 dimensions by GNUPLOT where
  716.  z is the axis of time.
  717.  
  718.  If you would like to try it now, rather than reading about it first, just
  719.  click the 'Auto Set-Up 1' button, which will set up the 3D-Time parameters
  720.  to work for many, if not most, sample files.  Then, click '...Done,' then
  721.  select a sample file to analyze (if you haven't done so already), and
  722.  click 'OK.'  If it doesn't work, you'll just have to read more.
  723.  
  724.  The basic model is as follows: The sample frames are divided into segments
  725.  called 'Time Segments,' and a spectrum analysis is performed on each Time
  726.  Segment.  Time Segments can be overlapped, and the overlap can either be
  727.  specified as a fraction of the size of each Time Segment ('Time Segment
  728.  Overlap') or as the number of frames by which each Time Segment is ahead
  729.  of the previous one ('Time Segment Offset').  By default, the Time Segment
  730.  Overlap is set to 0.5 (i.e. 50%) and the 'Time Segment Offset' is computed
  731.  automatically.  Then, either the number of time segments can be specified
  732.  (this is the 'Time Segment Count') or, their size can be specified (this
  733.  is the 'Time Segment Size') whichever is more convenient or useful to your
  734.  application.
  735.  
  736.  One of the two parameters Time Segment Count and Time Segment Size must be
  737.  set.  When either of these two parameters is set, any previous value of
  738.  the other one is cleared.
  739.  
  740.  Time Segment Overlap has a default value of 0.5.  If Time Segment Offset
  741.  is set, it supercedes Time Segment Overlap (whose value is then hidden).
  742.  
  743.  If you set any of the above 3D-Time parameters, the toggle button 3D-Time
  744.  On is activated.
  745.  
  746.  You may also adjust the X Rotation and Z Rotation factors used by GNUPLOT
  747.  in rendering the 3-d plot, and/or select Hidden3D display, which hides all
  748.  lines which are behind the 3D surface.  (This feature may not work with
  749.  versions of GNUPLOT prior to 3.4.)
  750.  
  751.  The Reset button clears Time Segment Count, Time Segment Size, Time
  752.  Segment Offset, and 3D-Time On, and Time Overlap, X Rotation, and Z
  753.  Rotation are set to their default values.  Any of these values may also be
  754.  cleared or defaulted by deleting all characters in each string gadget and
  755.  pressing return.
  756.  
  757.  You may advance to the next string gadget in this requester simply by
  758.  pressing RETURN.
  759.  
  760.  Note that Time Segments are distinct from the FFT 'segments' used in a
  761.  flat spectral analysis and from the FFT analysis within each Time Segment.
  762.  If each Time Segment is large enough relative to the number of Bins, there
  763.  may be more than one FFT segment within each Time Segment, the results of
  764.  which are averaged to reduce the variance.  Within each Time Segment, the
  765.  usual 'Bins,' 'Overlap,' 'Pad,' and window shape parameters still apply,
  766.  so the full flexibility of a flat GFFT is available (though the maximum
  767.  number of bins possible may be reduced).  Only one parameter available to
  768.  a flat analysis is unavailable for analysis within each Time
  769.  Segment--StartFrame (a parameter which may only be set from the CLI).
  770.  StartFrame will apply to the input file as a whole and not to each Time
  771.  Segment.
  772.  
  773.  In cases where 3D-Time analysis reduces the number of bins possible, the
  774.  use of high performance window shapes such as Hann or 74dB Blackman-Harris
  775.  is recommended.
  776.  
  777.  
  778.  Examples:
  779.  
  780.  1.  Suppose you just want a rough idea as to how the spectrum in a fairly
  781.  small sample file (such as an instrument) varies over time, and are
  782.  willing to use the default Time Segment Overlap, and would simply like
  783.  each segment to use the maximum Bins size possible (and with overlap, if
  784.  possible).  You might figure 5 time segments would be adequate to get a
  785.  rough idea, yet would not be too many considering the number of frames.
  786.  (If you have a very small sample file, you might have to use only 2 or 3
  787.  Time Segments.  Increasing the number of Time Segments will reduce the
  788.  maximum possible number of bins, so there is a trade-off here which is
  789.  critical for small sample files.)
  790.  
  791.  Set the Time Segment Count to 5, and click 'Done.'  In the main Workbench
  792.  Dialog Window click on 'Bins-MAX' and/or 'Overlap' if they had previously
  793.  been turned off.
  794.  
  795.  
  796.  2.  Suppose you wish to divide the sample file into non-overlapping time
  797.  segments which could each be analyzed with 1024 bins (with no overlap or
  798.  padding within each time segment).
  799.  
  800.  First set the Time Segment Size parameter to 2048, then set the Time
  801.  Overlap parameter to 0.  (For non-complex data, there must be 2 sample
  802.  frames for each FFT bin.)  This is sufficient to define this analysis, and
  803.  3D-Time On is selected automatically, so then you click 'Done.'  If you
  804.  have not already set the number of Bins explicitly, you will notice that
  805.  it has been automatically set to 1024.  Since exactly 2048 frames are
  806.  available for each FFT analysis, no overlap will be used regardless of
  807.  whether the Overlap button in the main GFFT Dialog is activated.
  808.  
  809.  
  810.  3. Suppose you wish to have each Time Segment to be ahead of the previous
  811.  one by exactly 1000 frames.  (This might apply if you want the z axis to
  812.  have increments of 0.1 second, and the sampling rate was 10,000.)  You
  813.  consider some Time Segment Overlap of approximately 0.5 to be acceptable,
  814.  but you would like an analysis with 1024 frequency bins.
  815.  
  816.  Set the Time Segment Size to 2048 and the Time Segment Offset to 1000.
  817.  
  818.  
  819.  4.  Suppose you have a VERY large sample file, and would rather not
  820.  analyze the whole thing, but would like a 'spot' analysis every 100,000
  821.  frames.  You would like to have 1024 bins used in each analysis, but would
  822.  prefer to reduce the variance of each 'spot' spectrum by averaging 4
  823.  overlapped segments within each time segment.
  824.  
  825.  Note that the overlap used for a flat spectral analysis and within each
  826.  Time Segment is fixed at 0.5 and cannot be changed (though it can be
  827.  turned off).  Therefore, 2 overlapping FFT segments would occupy 1.5x the
  828.  space of one segment, 3 overlapping segments would occupy 2x, and 4
  829.  overlapping segments would occupy 2.5x if exactly these numbers of frames
  830.  are available.* 
  831.  
  832.  Set the Time Segment Offset to 100,000, and the Time Segment Size to 5120
  833.  (2.5 x (1024 x 2)).  Click 'Done...' and set the Bins gadget (in the main
  834.  dialog window) to 1024.
  835.  
  836.  (*Actually, 2 overlapping segments will be used for any number of frames
  837.  greater than 1 segment but less than 2 segments, 3 overlapping segments
  838.  will be used for exactly the number of frames in 2 segments, 4 overlapping
  839.  segments will be used for any number of frames greater than 2 segments but
  840.  less than 3 segments, and so on.)
  841.  
  842.  
  843. ?Workbench Ok
  844.  
  845.  The OK button initiates an FFT according to all the specified parameters.
  846.  The selected Sample File will be read and transformed, the selected
  847.  Spectrum File file (if any) will be written to (otherwise, a temporary
  848.  file will be used), and a PLOT will be produced (if that option is
  849.  enabled).
  850.  
  851.  This command is invalid if any parameters have been set incorrectly, if no
  852.  sample file has been selected, or if plot mode is disabled AND no named
  853.  (permanent) spectrum file has been selected.
  854.  
  855.  Example:
  856.  
  857.      1. select sample file using the requester that appears after pressing
  858.           SELECT in the Sample File row (requires 2.0+) or enter
  859.           filename directly in Sample File Gadget
  860.      2. plot is enabled by default in workbench mode; re-enable if disabled
  861.           by clicking on it
  862.      3. click the OK button
  863.  
  864.  Note: depending on the size of the sample file, the number of bins and
  865.  other parameters you have set, as well as the CPU and/or FPU resources
  866.  available, an FFT analysis could take anywhere between a fraction of a
  867.  second to several weeks.  So, if you don't get an immediate response, have
  868.  faith that GFFT is working, not hanging.  If there is any error, GFFT
  869.  should let you know right away.  If it is working away on your file, and
  870.  the number of bins is small compared with the size of your sample file,
  871.  you will see the disk light flickering occasionally.
  872.  
  873.  While an FFT is being performed, DO NOT click on any other gadgets in the
  874.  GFFT Dialog Window.
  875.  
  876.  
  877. ?Workbench Cal-&-Mag
  878.  
  879.  The 'Cal & Mag' button brings up the Calibration and Magnification
  880.  Requester which allows you to specify calibration files and values for
  881.  quantization, low Y, and high Y.
  882.  
  883.  A help button is provided within the Calibration and Magnification
  884.  Requester which provides more information.
  885.  
  886.  
  887. ?Workbench Calibration Help
  888.  
  889.  The Calibration and Magnification requester enables you to apply a
  890.  'calibration' to the output of GFFT.  In this way, you can compensate for
  891.  the frequency response of your sampler, microphone, noise source, etc.
  892.  Any number of calibrations may be in effect at the same time.  Each time a
  893.  filename is entered into the Calibration or DbCalibration gadgets, a new
  894.  calibration is linked into the current list of calibrations (even though
  895.  only the last one entered into each gadget is shown).  The entire list is
  896.  canceled by clicking the Cancel All Calibrations button.  A message window
  897.  shows the number of calibrations currently in effect, and indicates
  898.  whether a calibration file is currently being processed...which can take
  899.  some time.)  (More about these gadgets follows...)
  900.  
  901.  This requester also includes the Quantization gadget, into which a
  902.  quantization value can be entered.  Quantization can be canceled by
  903.  clicking the Cancel button following the Quantization gadget, or by
  904.  erasing the value shown.  (More about this gadget follows...)
  905.  
  906.  This requester also includes the Low Y and High Y gadgets, which allow you
  907.  to adjust the Y range used in plotting.  You may restore either or both of
  908.  these to the default (autoscaling) by deleting the value shown, or by
  909.  clicking the Cancel buttons which follow each one.  It is best to set both
  910.  of these gadgets if setting either one.  (More about these gadgets
  911.  follows...)
  912.  
  913.  The Calibration gadget allows you to enter a calibration file to be
  914.  applied to the spectrum data before output.  The DbCalibration gadget
  915.  allows you to calibrate using a file in which the amplitudes are scaled in
  916.  dB.  Calibrations and DbCalibrations may be applied to spectrums in any
  917.  combination regardless of whether the final output is scaled in dB or not.
  918.  Each of these gadgets has a small 'S' button; when the S button is
  919.  clicked, a file requester comes up to allow you to select the file.  (This
  920.  file requester requires Workbench 2.0 or higher; otherwise, you will have
  921.  to enter the name into the corresponding gadget yourself.)
  922.  
  923.  The calibration file(s) should be in the same format as the spectrum files
  924.  produced by GFFT itself.  Each line (terminated by newline) should have a
  925.  frequency value, any number of spaces, and an amplitude value (NOT a
  926.  'power' or squared amplitude value!).  The frequencies must be in
  927.  increasing order, and the range of frequencies must be equal to or greater
  928.  than that to be output by GFFT (see warning below).  Lines beginning with
  929.  one of the following characters are considered to be comments:
  930.  
  931.      # ; !
  932.  
  933.  If a spectrum is calibrated by itself, the result should be a straight
  934.  line at either 1.0 or 0.0 (for dB output).  Actually, due to slight
  935.  rounding errors, the actual result will be close to, but not exactly these
  936.  ideal values (e.g. 0.9999998).  Given that Gnuplot will always scale the
  937.  output to the maximum Y magnification, small differences between these
  938.  values will be shown from the top to the bottom of the Y scale.  To
  939.  correct this effect, consider setting the LowY and/or HighY values
  940.  explicitly to increase the vertical range, which will make the spectral
  941.  line look much flatter.  Quantization can also be used, but it has some
  942.  other disadvantages.
  943.  
  944.  Calibration as used here is unrelated to true complex 'correlation,' which
  945.  is not currently available in GFFT.  Calibration has somewhat limited
  946.  accuracy and validity, but is still probably a feature worth having for
  947.  its usefulness.  Note that in between points specified in a calibration
  948.  file, simple linear interpolation will be used by GFFT.  If a frequency
  949.  higher than the highest calibration frequency is output by GFFT, it will
  950.  be calibrated by the value for the highest calibration frequency, and any
  951.  frequency lower than the lowest calibration frequency will be calibrated
  952.  by the value for the lowest calibration frequency.  In other words, GFFT
  953.  uses simple horizontal extension of the calibration curve rather than
  954.  extrapolation.  (WARNING!  This could be dangerous if interpreted
  955.  improperly!  Remember to provide calibrations over a range equal to or
  956.  greater than the range to be output by GFFT.)
  957.  
  958.  One way to use Calibration is to perform a GFFT analysis on your signal
  959.  source itself, and then apply that result as a 'calibration' to your test
  960.  measurements.  Another way is to write frequency response data provided by
  961.  a calibration laboratory (such as for a microphone) into a suitable
  962.  calibration file.  In fact, both kinds of calibration can be used at the
  963.  same time.
  964.  
  965.  
  966.  The High Y gadget allows you to set the lowest value to be shown on the
  967.  vertical axis used for plotting by GNUPLOT.  Using this gadget, you can
  968.  'zoom in' or 'zoom out' vertically into the plot.  This gadget has no
  969.  effect on the data file written by GFFT.
  970.  
  971.  The Low Y gadget allows you to set the lowest value to be shown on the
  972.  vertical axis used for plotting by GNUPLOT.  Using this gadget, you can
  973.  'zoom in' or 'zoom out' vertically into the plot.  This gadget has no
  974.  effect on the data file written by GFFT.
  975.  
  976.  Note that GNUPLOT might do strange things if you specify a HighY value
  977.  without also specifying a LowY value and vice-versa.  It may, for example,
  978.  decide to run the Y axis upside down in order to show the widest range of
  979.  Y values.  Or, if less than one Y unit would be plotted when autoscaling
  980.  one value, GNUPLOT may decide the Y range is invalid.  So, it is safest to
  981.  specify both High Y and Low Y.
  982.  
  983.  In 3D mode, the vertical axis (representing power or amplitude) is
  984.  actually the Z axis, so the High Y and Low Y values selected are applied
  985.  to the Z axis in that mode.
  986.  
  987.  Quantization lets you set a quantization value for GFFT output.  For
  988.  example, a quantization of 0.1 will cause all amplitude or power values to
  989.  be rounded off to the nearest 0.1.
  990.  
  991.  Note that you could use any arbitrary value for quantization (e.g.
  992.  12.3456) though this might not be very useful.  Typical values might be
  993.  0.1, 0.05, 0.001, etc.
  994.  
  995.  Quantization only affects the amplitude or power values.  It has no effect
  996.  on the FFT computation itself, and does not affect the output of frequency
  997.  values.
  998.  
  999.  
  1000. ?Workbench Copyright
  1001.  
  1002.  The 'Copyright' button at the top of the GFFT Dialog window displays the
  1003.  version number of GFFT you are running and a copyright notice.  When
  1004.  clicked, it brings up a requester which can provide more information about
  1005.  the author, the NO WARRANTY disclaimer, the GNU General Public License
  1006.  agreement, information about services available from the author and how
  1007.  you can support the development of this program, and other information
  1008.  about the development of this program.
  1009.  
  1010.  
  1011. ?Workbench Help
  1012.  
  1013.  The 'help' button brings up a requester which displays instructions on how
  1014.  to obtain help for any gadget displayed in the GFFT Dialog Window,
  1015.  provides a button to display an introductory message, and provides a
  1016.  string gadget to get help on other topics suggested by the introductory
  1017.  message.
  1018.  
  1019.  
  1020. ?Workbench Help Topics
  1021.  
  1022.  To get help for any general topic documented in the help file for GFFT,
  1023.  enter the topic name in the Help Topic gadget and press return.  To get
  1024.  a list of topics which you may request help for, press the 'Topics'
  1025.  button.
  1026.  
  1027.  
  1028. ?Workbench Sample-File
  1029.  
  1030.  The Sample File gadget displays the currently selected sample file (if
  1031.  any) and allows you to enter the name of any other sample file to read.
  1032.  You may click in the text box and type the name.  This action may be
  1033.  completed by pressing the Return key, or by clicking on any other button.
  1034.  (As soon as Return is pressed or any other button is clicked, the file you
  1035.  named will be opened.)
  1036.  
  1037.  Under Workbench 2.0 or greater, you may also select a file to read using
  1038.  the adjacent 'Select' button which brings up an ASL file requester.
  1039.  
  1040.  If GFFT was started by clicking on the GFFT icon, the Sample File gadget
  1041.  will be activated by default so that you can just start typing the name of
  1042.  the first sample file to analyze.  If GFFT was started by clicking on a
  1043.  sample file icon that has GFFT as its tooltype, or through the 'extended
  1044.  selection' of GFFT and one or more sample files, the name of the first
  1045.  sample file will appear in the Sample File gadget and the gadget will not
  1046.  be activated by default.  If more than one sample file was selected, you
  1047.  may advance to the next one by clicking on the 'Next' gadget.
  1048.  
  1049.  GFFT can also read data points entered from the keyboard.  See help for
  1050.  the 'con:' button for further information.
  1051.  
  1052.  GFFT can read both formatted and unformatted files.  If GFFT understands
  1053.  the format of the file (it currently understands IFF 8SVX, AIFF, and AVR
  1054.  formats), it will automatically set the sampling rate, and it will know
  1055.  the number of frames so that the maximum number of bins can be determined
  1056.  without scanning the entire file.  (GFFT also recognizes but does not yet
  1057.  understand RIFF and VOCH formats.  See help for the IgnoreFormat command
  1058.  for some advice on how to deal with those formats.)
  1059.  
  1060.  If the file is unformatted, you will have to set the sampling rate
  1061.  manually before beginning an analysis.  You may also have to use the Bits
  1062.  and Unsigned commands if your unformatted file does not use the default
  1063.  for unformatted files (8 bits, signed).  If the file is formatted using an
  1064.  unrecognized format, you may still be able to read it using the command
  1065.  'StartByte' (which allows you to skip over the file header) if you know
  1066.  how long the file header is, and 'Frames' (which allows you to read a
  1067.  specified number of frames, skipping any file segments following the
  1068.  sample data).  This is not recommended unless you are very familiar with
  1069.  the inner workings of the file format you are working with.
  1070.  
  1071.  
  1072. ?Workbench Sample-Select
  1073.  
  1074.  When the Select button is clicked, a requester will appear to let you
  1075.  select the sample file for GFFT to read.  This feature requires Workbench
  1076.  2.0 or higher.  (If you do not have 2.0 or higher, you can enter the
  1077.  filename into the Sample File gadget, or use the 'extended selection' of
  1078.  GFFT and one or more sample files from the Workbench.)
  1079.  
  1080.  
  1081. ?Workbench Sample-Con:
  1082.  
  1083.  In addition to reading stored sample files, GFFT can accept data points
  1084.  through the keyboard 'con:' device.  You can select this option either by
  1085.  clicking on the Sample File 'con:' button, or entering the name 'con:'
  1086.  into the Sample File string gadget.  Next, you should enter the sampling
  1087.  rate into the 'S Rate' gadget.  Then, you can adjust other parameters.
  1088.  Finally, after you click 'OK,' you will be prompted to enter each data
  1089.  point from a console window.  You may enter each data point as an integer
  1090.  or as a floating point number with optional exponent.
  1091.  
  1092.  If you started GFFT from the Workbench using Workbench 2.0 or greater, a
  1093.  new console window will appear for you to enter data points.  If you
  1094.  started GFFT from the CLI, and then activated the GFFT Dialog Window using
  1095.  the WORKBENCH command, you will be prompted to enter data points in the
  1096.  original CLI from which you started GFFT (which might now be hidden by the
  1097.  GFFT Dialog Window).  If you started GFFT from the Workbench using
  1098.  Workbench 1.3, the GFFT console window will be present whether you use it
  1099.  or not (due to limitations of that Workbench version).
  1100.  
  1101.  This may be useful if you have a small number of manually recorded data
  1102.  points, or wish to experiment with FFT spectrum analysis to gain a deeper
  1103.  understanding of it.  For example, if you entered the following points:
  1104.  
  1105.         > 1
  1106.         > 0
  1107.         > -1
  1108.         > 0
  1109.  
  1110.  You would get a spectrum of 2 points (Nyquist Frequency/2, Nyquist
  1111.  Frequency) or 3 points if you set the Low Frequency to 0 (as "zero
  1112.  frequency," i.e. D.C., would be included).  The center frequency of
  1113.  Nyquist Frequency/2 would have amplitude 0.707 and the amplitude would be
  1114.  0 at the other frequency(ies).  This illustrates the default normalization
  1115.  of GFFT, since 0.707... is also the RMS amplitude of the signal you have
  1116.  entered, and the frequency is 1/2 of the Nyquist Frequency.
  1117.  
  1118.  
  1119. ?Workbench Octave-Low
  1120.  
  1121.  The 'Octave Low' button selects the lowest octave currently available in
  1122.  a formatted file (such as 8SVX) which may have more than one octave.  If
  1123.  there is only one octave present, it is considered to match the lowest
  1124.  octave.  'Low Octave' is the default octave.
  1125.  
  1126.  
  1127. ?Workbench Octave-2
  1128.  
  1129.  The 'Octave 2' button selects the second (from the lowest) octave
  1130.  available in a file with a format (such as 8SVX) which supports more than
  1131.  one octave.  If the sample file does not have this octave, this button
  1132.  should be ghosted.
  1133.  
  1134.  
  1135. ?Workbench Octave-3
  1136.  
  1137.  The 'Octave 3' button selects the third (from the lowest) octave available
  1138.  in a file with a format (such as 8SVX) which supports more than one
  1139.  octave.  If the sample file does not have this octave, this button should
  1140.  be ghosted.
  1141.  
  1142.  
  1143. ?Workbench Octave-4
  1144.  
  1145.  The 'Octave 4' button selects the fourth (from the lowest) octave
  1146.  available in a file with a format (such as 8SVX) which supports more than
  1147.  one octave.  If the sample file does not have this octave, this button
  1148.  should be ghosted.
  1149.  
  1150.  
  1151. ?Workbench Octave-5
  1152.  
  1153.  The 'Octave 5' button selects the fifth (from the lowest) octave available
  1154.  in a file with a format (such as 8SVX) which supports more than one
  1155.  octave.  If the sample file does not have this octave, this button should
  1156.  be ghosted.
  1157.  
  1158.  
  1159. ?Workbench Octave-6
  1160.  
  1161.  The 'Octave 6' button selects the second (from the lowest) octave
  1162.  available in a file with a format (such as 8SVX) which supports more than
  1163.  one octave.  If the sample file does not have this octave, this button
  1164.  should be ghosted.
  1165.  
  1166.  
  1167. ?Workbench Octave-7
  1168.  
  1169.  The 'Octave 7' button selects the second (from the lowest) octave
  1170.  available in a file with a format (such as 8SVX) which supports more than
  1171.  one octave.  If the sample file does not have this octave, this button
  1172.  should be ghosted.
  1173.  
  1174.  
  1175. ?Workbench Octave-Hi
  1176.  
  1177.  The 'octave hi' button selects the highest available octave in a file with
  1178.  a format (such as 8SVX) which supports more than one octave.  This choice
  1179.  is always valid, regardless of how many octaves are in the file.
  1180.  
  1181.  
  1182. ?Workbench One-Shot-Only
  1183.  
  1184.  The One-Shot Only button causes GFFT to read only the one-shot portion of
  1185.  a sample in a format (e.g. 8SVX) supporting this feature.  Pressing the
  1186.  One-Shot Only button a second time will disengage it and cause GFFT to
  1187.  read the entire sample.
  1188.  
  1189.  Pressing the One-Shot Only button once will also disengage the Repeat Only
  1190.  button if it had previously been engaged.
  1191.  
  1192.  
  1193. ?Workbench Repeat-Only
  1194.  
  1195.  The Repeat Only button causes GFFT to read on the repeat portion of a
  1196.  sample in a format (e.g. 8SVX) which supports this feature.  Pressing the
  1197.  Repeat Only button a second time will disengage it and cause GFFT to read
  1198.  the entire sample.
  1199.  
  1200.  Pressing the Repeat Only button once will also disengage the One-Shot Only
  1201.  button if it had previously been engaged.
  1202.  
  1203.  
  1204. ?Workbench Channel
  1205.  
  1206.  The Channel gadget selects a particular channel for a file in a format
  1207.  (e.g. AIFF) which supports this feature.  After entering the channel
  1208.  number in this gadget, you may press return to have it entered and checked
  1209.  immediately.  If the selected channel is unavailable, an error requester
  1210.  will appear, however, the number you selected will not be changed; it will
  1211.  be up to you to enter a valid number.  You must have entered a valid
  1212.  channel number before clicking OK.  To select the default channel, delete
  1213.  all characters and press RETURN.  (The default channel is always Channel
  1214.  1.)
  1215.  
  1216.  
  1217. ?Workbench Rate
  1218.  
  1219.  The S Rate gadget automatically displays the sampling rate defined by a
  1220.  formatted file and allows you to specify a rate for any file.  For an
  1221.  unformatted file, you must enter a valid sampling rate before clicking OK.
  1222.  (Any positive floating point number is acceptable.)  You may also override
  1223.  the sampling rate value for a formatted file by entering a different rate
  1224.  AFTER selecting the file.  When the next formatted file is read in, the
  1225.  Sampling Rate gadget will be set to the sampling rate indicated by that
  1226.  file.
  1227.  
  1228.  
  1229. ?Workbench Bins
  1230.  
  1231.  The Bins gadget displays the current bins value, and allows you to enter a
  1232.  different bins value if desired.  By default, GFFT chooses the maximum
  1233.  number of bins which could be put to use (considering the number of sample
  1234.  frames and other parameters in effect).  If you have a very large sample
  1235.  file, or desire to reduce the spectral variance by averaging successive
  1236.  frame segments, you should choose a smaller number of bins.
  1237.  
  1238.  1024 is a typical number of bins, though I usually use more.  You should
  1239.  enter a value which is a power of 2.  If you do not, GFFT will choose the
  1240.  next higher power of two for you.  If you select a number of bins higher
  1241.  than the maximum, GFFT will detect this problem after you click OK.
  1242.  
  1243.  When you enter a number of bins, the MAX Bins button will disengage.  The
  1244.  value you specify will then continue to be used for subsequent files
  1245.  regardless of their size.  To return to the default (MAX) bins setting,
  1246.  press the MAX bins button, or delete all digits from the Bins gadget.
  1247.  
  1248.  For an unformatted file, the default number of bins will not be known
  1249.  until the file is scanned, and normally this does not happen until the
  1250.  OK button is pressed, so the Bins gadget will remain blank unless you
  1251.  choose to specify a non-default number of bins.
  1252.  
  1253.  
  1254. ?Workbench Bins-MAX
  1255.  
  1256.  The Bins MAX button indicates whether GFFT is automatically determining
  1257.  the number of bins based on the number of frames in the file (and other
  1258.  settings), as it does by default.  Also, by clicking the MAX Bins button,
  1259.  you can re-engage this automatic default mode.  If the MAX Bins button is
  1260.  unselected, it indicates that a number of bins was entered into the Bins
  1261.  gadget, dis-engaging the default MAX mode.  
  1262.  
  1263.  (The MAX Bins gadget will not automatically be selected if you happen to
  1264.  enter the maximum number of bins into the Bins gadget, as that fixed value
  1265.  would continue to be applied to subsequent files regardless of their
  1266.  size.)
  1267.  
  1268.  
  1269. ?Workbench Plot
  1270.  
  1271.  The Plot button is a toggle button which selects or de-selects Plot mode.
  1272.  In Plot mode, GNUPLOT is automatically invoked in a shell process to
  1273.  display the result of each spectrum analysis performed.  If you have not
  1274.  explicitly selected a file to which to write spectral data, GFFT will
  1275.  automatically write a temporary file (in t:) for GNUPLOT to read.  All
  1276.  such temporary files will be deleted on exit from GFFT if you have
  1277.  terminated the plot display.  You terminate the plot display by pressing
  1278.  RETURN after it has been displayed.  GFFT can only display one PLOT at a
  1279.  time, but you can overlay or concatenate several spectra in one PLOT
  1280.  clicking the Plot-Combine ('&' following Plot) or Open buttons (see).
  1281.  
  1282.  If Plot mode is de-selected, a spectrum file must be explicitly
  1283.  specified--otherwise there is no point in doing the analysis since the
  1284.  data would only be written to a temporary file and then deleted.  GFFT
  1285.  will check to see that either a spectrum file has been specified and/or
  1286.  Plot mode is engaged when you click OK.
  1287.  
  1288.  If you wish to create a nicely labeled Plot, it is preferable to
  1289.  explicitly name each spectrum file, since GNUPLOT will use each the name
  1290.  of each spectrum file to label the corresponding spectrum.  Read HELP for
  1291.  the Write gadget for further details.
  1292.  
  1293.  
  1294. ?Workbench Plot-Combine
  1295.  
  1296.  The Plot-Combine button (the ampersand following the PLOT button)
  1297.  activates CombinePlots mode.  In this mode, successive spectra are shown
  1298.  together in the same plot display.  Each spectrum is plotted with a
  1299.  different color (or linetype) by GNUPLOT and labeled with the name of the
  1300.  specified spectrum file or temporary file.  Using CombinePlots mode,
  1301.  different data and/or parameter choices can be compared.
  1302.  
  1303.  CombinePlots will have no effect unless Plot mode is also engaged.
  1304.  
  1305.  The Plot-Combine button is a toggle button.  To disengage CombinePlots
  1306.  mode after having engaged it, click the button again.
  1307.  
  1308.  When CombinePlots mode is first engaged, the previously completed spectrum
  1309.  (if any) becomes the first data set for the plotter, the next completed
  1310.  spectrum becomes the second data set, and so on.  If you would rather not
  1311.  include the previously completed spectrum, click the 'Plot-Cut' (X) button
  1312.  (immediately to the right) after engaging CombinePlots.
  1313.  
  1314.  To use this mode most easily, CANCEL any spectrum file name you have
  1315.  specified and let GFFT create sequentially named temporary files for you.
  1316.  If you would like to save each spectrum to a named file, then YOU MUST
  1317.  remember to create a different named file for each spectrum computed.
  1318.  Otherwise, each new spectrum will overwrite the previous one, and you will
  1319.  get nothing but the same spectrum over and over.  For use with RePlot, you
  1320.  will have to Plot-Cut (X) the current file first, or it will be repeated
  1321.  twice.  Use of Plot-Combine with Write-Append can also be tricky.
  1322.  
  1323.  When CombinePlots mode is disengaged, all previously combined spectra are
  1324.  'cut' off, so that if CombinePlots is re-engaged immediately, a new plot
  1325.  combination starts from scratch.
  1326.  
  1327.  To 'cut' only the last spectrum, click the Plot-Cut button once.  To cut
  1328.  several spectra from the plot combination, click Plot-Cut button several
  1329.  times.  Each time Plot-Cut is clicked, one more spectra is cut from the
  1330.  end until there are no more spectra to be cut.  (This is a useful way to
  1331.  cut spectra that didn't quite work out without starting over.)
  1332.  
  1333.  CombinePlots mode is very useful for many things including comparing the
  1334.  effect of different parameters (e.g. window type), or for comparing
  1335.  alternate sets of data representing the same original source (to get a
  1336.  feel for the variance caused by random fluctuations).  (When you are
  1337.  recording sample files for later analysis, remember to record two or more
  1338.  sample files so that you can compare them and see which spectral features
  1339.  are truly inherent in the source and not the result of random
  1340.  fluctuations.  If the variance is minimal, the spectral lines for each
  1341.  sample file should lay on top of one another, or nearly so.  Note that
  1342.  very large sample files (> 1,000,000 frames) may be necessary to reduce
  1343.  the variance of a pink noise source in the low frequency ranges to
  1344.  acceptable levels.)
  1345.  
  1346.  
  1347. ?Workbench Plot-Cut
  1348.  
  1349.  The workbench Plot-Cut button cuts the previous spectrum when in
  1350.  CombinePlots mode.
  1351.  
  1352.  To 'cut' only the last spectrum, click the Plot-Cut button once.  To cut
  1353.  several spectra from the plot combination, click Plot-Cut button several
  1354.  times.  Each time Plot-Cut is clicked, one more spectra is cut from the
  1355.  end until there are no more spectra to be cut.  (This is a useful way to
  1356.  cut spectra that didn't quite work out without starting over.)
  1357.  
  1358.  See help for the Plot-Combine button (immediately to the left) for further
  1359.  information about CombinePlots mode.
  1360.  
  1361.  
  1362. ?Workbench Overlap
  1363.  
  1364.  The Overlap button is a toggle button which engages or disengages overlap
  1365.  mode.
  1366.  
  1367.  Because it makes the best use of a limited amount of data, overlap mode is
  1368.  engaged by default.  It is also able to include all the data in the
  1369.  analysis, regardless of whether the number of frames is exactly 2n times a
  1370.  power of 2 (where n is a positive integer).  If you are more concerned
  1371.  with making the best use of processing time, and are not concerned about
  1372.  ignoring a trailing remainder of the data, you may wish to disengage
  1373.  overlap mode.
  1374.  
  1375.  In overlap mode, the windows applied to the data are overlapped.  By
  1376.  overlapping the windows (as compared with just laying them end-to-end to
  1377.  cover all frames present) better use is made of a fixed amount of data in
  1378.  reducing the variance of the computed spectrum.  This is true for all
  1379.  window shapes, but especially true for the non-rectangular ones.
  1380.  Overlapping may provide up to 9/11 of the variance reduction of having
  1381.  twice as much data to work with (see Press, et. al.).
  1382.  
  1383.  If overlap mode is disengaged, successive windows will still be applied to
  1384.  the input data (if the number of frames is 4 times or more greater than
  1385.  the number of bins) and the result from each window will be averaged to
  1386.  reduce the variance, but windows will not be overlapped.  Also, any
  1387.  partial window of data at the end will not be analyzed (unless pad mode is
  1388.  selected, which is strongly discouraged).
  1389.  
  1390.  Normally, windows are overlapped by half their length (i.e., the fixed
  1391.  overlap percentage for flat FFT analysis is 50%).  However, in overlap
  1392.  mode, the overlap of the last window is decreased or increased to
  1393.  encompass the remainder of the data.
  1394.  
  1395.  Given real (i.e. non-complex) sample data, 2 data points (frames) are
  1396.  required for each Bin.  Thus, 1024 bins would require 2048 frames.  With
  1397.  50% overlap, two overlapping windows would fit exactly into 3072 (2048 x
  1398.  1.5) frames, three overlapping windows would fit exactly into 4096 (2048 x
  1399.  2) frames, and four overlapping windows would fit exactly into 5120 (2048
  1400.  x 2.5) frames.  But GFFT varies the overlap of the last window to fit
  1401.  whatever amount of additional data is present after the last whole window
  1402.  of data has been read.  So, two windows are used for any number of frames
  1403.  F such that 2048 < F < 4096, three windows are used for F = 4096, four
  1404.  windows are used for 4096 < F < 6144, and so on, with the overlap of the
  1405.  last window somewhere between 0 and 100% (non-inclusive).
  1406.  
  1407.  Though this scheme will ensure that all frames are included in at least
  1408.  one segment, it may result in either over-representation or
  1409.  under-representation of the last region of data.  This is a fairly minor
  1410.  detail (especially considering that the FFT is really only intended for
  1411.  'continuous' sounds...) but if you are concerned with such things you may
  1412.  want to specify exactly the number of frames to be used using the Frames
  1413.  or StartFrame commands available in the CLI interface, and make sure you
  1414.  have chosen an exact multiple (two or greater) of the bin size for an
  1415.  exact overlap fit.  For 3D-Time analysis, you should set the Time Segment
  1416.  Size instead (this is discussed further in by the special help button in
  1417.  the 3D-Time requester).
  1418.  
  1419.  
  1420. ?Workbench Pad
  1421.  
  1422.  [This button has been removed.  I saw no real need for it, and it was
  1423.   taking up critical screen real estate.]
  1424.  
  1425.  The Pad button is a toggle which engages or disengages 'Pad' mode.  In
  1426.  'Pad' mode, the last (or only) partial window of data will be padded with
  1427.  zeros prior to analysis.  Pad mode is disengaged by default, and its use
  1428.  is strongly discouraged.
  1429.  
  1430.  Though it may sound innocuous, zero padding can produce serious artifacts
  1431.  in a computed spectrum, and I strongly discourage it.  The default
  1432.  'Overlap' mode takes the best use of all the data without padding or
  1433.  truncation.  Even truncation, which might result if 'Overlap' mode is
  1434.  disengaged, is superior to padding for most purposes.  The only advantage
  1435.  of padding is that it permits the use of a larger maximum number of bins
  1436.  than the other techniques in some cases, but be forewarned that many of
  1437.  those bins will be filled with spurious garbage.
  1438.  
  1439.  See help for the Bins and Overlap buttons for further discussion.
  1440.  
  1441. ?Workbench Rectangle
  1442.  
  1443.  The Rectangle button selects windows of rectangular shape.  These windows
  1444.  will be applied to the data in segments whose size is determined by the
  1445.  number of bins.
  1446.  
  1447.  The Rectangle button is a 'radio' style button which disengages any other
  1448.  window shape button.  Likewise it is disengaged by the selection of any
  1449.  other window shape button.
  1450.  
  1451.  The 'Rectangle' window is the simplest window (effectively a series of
  1452.  1's) and the fastest to compute and apply (i.e. no computation or
  1453.  application is necessary).  It also results in the sharpest initial
  1454.  fall-off on either side of a spectral peak.  However, it is also the most
  1455.  susceptible to the presence of side-lobe artifacts.  If you wish to remove
  1456.  the influence of side-lobes, use a different window shape, such as 'B-H
  1457.  74dB.'
  1458.  
  1459.  Rectangle is currently the default window shape.
  1460.  
  1461.  
  1462. ?Workbench Triangle
  1463.  
  1464.  The Triangle button selects windows of triangular shape.  These windows
  1465.  will be applied to the data in segments whose size is determined by the
  1466.  number of bins.
  1467.  
  1468.  The Triangle button is a 'radio' style button which disengages any other
  1469.  selected window shape button.  Likewise it is disengaged by the selection
  1470.  of any other window shape button.
  1471.  
  1472.  The 'Triangle' window is the next simplest window, after the Rectangle
  1473.  window.  Its shape is that of a triangle peaking in the center of each
  1474.  data segment.  The 'Triangle' window is often called the 'Bartlett'
  1475.  window, after a scientist who found it to be useful.
  1476.  
  1477.  The triangle window is superior to the rectangle window in side-lobe
  1478.  rejection.  In turn, it is inferior to all other window shapes except
  1479.  rectangle in side-lobe rejection.
  1480.  
  1481.  
  1482. ?Workbench Parzen
  1483.  
  1484.  The Parzen button selects windows of a particular shape.  These windows
  1485.  will be applied to the data in segments whose size is determined by the
  1486.  number of bins.
  1487.  
  1488.  The Parzen button is a 'radio' style button which disengages any other
  1489.  selected window shape button.  Likewise it is disengaged by the selection
  1490.  of any other window shape button.
  1491.  
  1492.  The Parzen window is based on the formula presented by Press, et al, in
  1493.  their book 'Numerical Recipes.'  It is not the same as the "Parzen Window"
  1494.  identified by Harris.  It is superior to the triangle and rectangle
  1495.  windows in sidelobe rejection.
  1496.  
  1497.  
  1498. ?Workbench Welch
  1499.  
  1500.  The Welch button selects windows of particular shape.  These windows will
  1501.  be applied to the data in segments whose size is determined by the number
  1502.  of bins.
  1503.  
  1504.  The Welch button is a 'radio' style button which disengages any other
  1505.  selected window shape button.  Likewise it is disengaged by the selection
  1506.  of any other window shape button.
  1507.  
  1508.  The Welch window is based on the formula presented by Press, et al, in
  1509.  their book 'Numerical Recipes.'  It is superior to the triangle and
  1510.  rectangle windows in sidelobe rejection.
  1511.  
  1512.  
  1513. ?Workbench Hann
  1514.  
  1515.  The Hann button selects windows of a particular shape.  These windows will
  1516.  be applied to the data in segments whose size is determined by the number
  1517.  of bins.
  1518.  
  1519.  The Hann button is a 'radio' style button which disengages any other
  1520.  selected window shape button.  Likewise it is disengaged by the selection
  1521.  of any other window shape button.
  1522.  
  1523.  The 'Hann Window' is frequently mis-named as the 'Hanning Window.'
  1524.  Actually, Hann-ing (or Hann'd) is a kind of verb which attests to the
  1525.  popularity of this window in instrumentation.  It is superior to the
  1526.  preceding windows in sidelobe rejection.  The formula used here is from
  1527.  Harris.
  1528.  
  1529.  
  1530. ?Workbench Hamming
  1531.  
  1532.  The Hamming button selects windows of a particular shape.  These windows
  1533.  will be applied to the data in segments whose size is determined by the
  1534.  number of bins.
  1535.  
  1536.  The Hamming button is a 'radio' style button which disengages any other
  1537.  selected window shape button.  Likewise it is disengaged by the selection
  1538.  of any other window shape button.
  1539.  
  1540.  The Hamming window is superior to the preceding windows in sidelobe
  1541.  rejection.  The formula used here is from Harris.
  1542.  
  1543.  
  1544. ?Workbench 74dB-Blackman-Harris
  1545.  
  1546.  The B-H 74dB button selects windows of a particular shape.  These windows
  1547.  will be applied to the data in segments whose size is determined by the
  1548.  number of bins.
  1549.  
  1550.  The B-H 74dB button is a 'radio' style button which disengages any other
  1551.  selected window shape button.  Likewise it is disengaged by the selection
  1552.  of any other window shape button.
  1553.  
  1554.  The Blackman-Harris 74dB window is a nearly optimal window according to
  1555.  criteria developed by Harris.  It is superior to all the preceding
  1556.  windows in sidelobe rejection.  The '74dB' refers to a 74dB minimum
  1557.  sidelobe rejection.  GFFT also provides the Blackman-Harris 92dB window
  1558.  which has even greater sidelobe rejection, but also suffers considerably
  1559.  from a loss of selectivity (actually, "processing loss") compared with
  1560.  other window shapes.
  1561.  
  1562.  
  1563. ?Workbench 92dB-Blackman-Harris
  1564.  
  1565.  The B-H 92dB button selects windows of a particular shape.  These windows
  1566.  will be applied to the data in segments whose size is determined by the
  1567.  number of bins.
  1568.  
  1569.  The B-H 92dB button is a 'radio' style button which disengages any other
  1570.  selected window shape button.  Likewise it is disengaged by the selection
  1571.  of any other window shape button.
  1572.  
  1573.  The Blackman-Harris 92dB window has the highest sidelobe rejection of all
  1574.  windows studied by Harris.  In fact, the '92dB' refers to the impressive
  1575.  92dB sidelobe rejection, so any spectral feature you see is that much more
  1576.  likely to be a real spectral feature (provided data of sufficient quality
  1577.  and quantity).  Unfortunately, it also suffers considerably from a
  1578.  corresponding "processing loss" in comparison with other windows included
  1579.  in this program, so that many real features may be smeared and hidden.
  1580.  Ultimately, each window has its own unique set of compromises.
  1581.  
  1582.  
  1583. ?Workbench Spectrum-File
  1584.  
  1585.  The Spectrum File gadget shows the name of the current non-temporary
  1586.  spectrum file (if any), and allows you to enter a new one.  The spectrum
  1587.  file is an output file produced by GFFT which is read by GNUPLOT (if Plot
  1588.  mode is enabled) and is also human-readable.  It is not necessary to name
  1589.  spectrum files if Plot mode is enabled because GFFT will automatically
  1590.  create and manage temporary spectrum files for you.  But, if you want to
  1591.  save the spectrum file for later use, or give it a nice name (since the
  1592.  spectrum file name is used by GNUPLOT as a label), you should name it
  1593.  using this gadget or one of the following buttons.
  1594.  
  1595.  If you would like GFFT to make up a permanent spectrum file name for you,
  1596.  use the '*.fft' button.  (It will take the sample file name and tack on
  1597.  ".fft").
  1598.  
  1599.  You may enter a filename into the Spectrum File gadget using a file
  1600.  requester if you click the Spectrum File Select ('S') button.  When you
  1601.  use that button and select a file, Open mode will be activated
  1602.  automatically, but you may cancel Open mode and return to Write mode if
  1603.  you do so right away.  See help for the 'S' button for further details.
  1604.  
  1605.  The Spectrum-File-Open to the left activates 'Open' mode, which changes
  1606.  how the spectrum file will be used...
  1607.  
  1608.  By default, GFFT starts in 'Write' mode in which every spectrum file
  1609.  written by GFFT will be written from the beginning each time.  When a name
  1610.  is entered into the Spectrum File gadget, GFFT will look for an existing
  1611.  file of that same name, and back it up first (to a file with the same name
  1612.  and a trailing underscore), and then begin writing the file from the
  1613.  beginning (overwriting all previous data).  To warn you that this is
  1614.  occurring, GFFT will display a warning requester.  Note that GFFT only
  1615.  performs one level of backup, so the second time you overwrite a spectrum
  1616.  file, the original data will be lost.
  1617.  
  1618.  In Open mode, GFFT will not overwrite pre-existing data in the spectrum
  1619.  file, but may be used either to re-plot that data, or to append additional
  1620.  "bands" of spectral data to it.  See help for the 'Open' button for
  1621.  further details.
  1622.  
  1623.  New data will not actually be written to the spectrum file until you click
  1624.  either 'OK' or 'ReOutput.'
  1625.  
  1626.  If you had selected an explicitly named output file but wish to return to
  1627.  using temporary files managed by GFFT, click the Write-Cancel ('CAN')
  1628.  button.  This is also a quick way to delete an existing spectrum file
  1629.  name so you can start over.
  1630.  
  1631.  You may also select the pseudo-file 'con:' to write data to.  This will
  1632.  cause the spectral data to be written to a console window (in the same way
  1633.  that the Sample file 'con:' button causes data to be read from a console
  1634.  window...see the help for that button for some discussion of how the
  1635.  console window appears and/or may be hidden depending on how GFFT was
  1636.  started and what Workbench revision you are using).  If you select con: as
  1637.  the spectrum file, you must cancel plot mode, as GNUPLOT cannot plot data
  1638.  written to the console window.
  1639.  
  1640.  
  1641. ?Workbench Spectrum-File-Select
  1642.  
  1643.  The Spectrum-File-Select button (the 'S' following the Spectrum File
  1644.  gadget) brings up a file requester to let you select a spectrum file to
  1645.  open (or write).  This feature requires Workbench 2.0 or higher.  (If you
  1646.  do not have 2.0 or higher, you can enter the filename into the Spectrum
  1647.  File gadget.)
  1648.  
  1649.  When you select a file in this manner, 'Open' mode is automatically
  1650.  activated to prevent you from overwriting previous spectral data by
  1651.  mistake, in case you wanted to RePlot the file or append new data bands to
  1652.  it (see help for the Open button).  However, if you really DID want to
  1653.  overwrite the spectrum file from the beginning, you may then click on the
  1654.  Open button to disengage Open mode immediately after selecting the file.
  1655.  You must make this change before clicking on any other button, or GFFT
  1656.  will cancel the spectrum file selection rather than allowing you to
  1657.  overwrite a spectrum file that was 'Opened.'
  1658.  
  1659.  
  1660. ?Workbench Spectrum-File-Open
  1661.  
  1662.  The Spectrum File 'Open' button is a toggle button which activates
  1663.  spectrum file 'Open' mode, or switches back to the default 'Write' mode.
  1664.  
  1665.  After Open mode has been activated, any spectrum file selected is opened
  1666.  at the end of existing data in the file, NOT overwritten from the
  1667.  beginning (as would be the case in Write mode).  This is useful either if
  1668.  you want to RePlot previously stored spectrum files, or append data to a
  1669.  spectrum file in bands.  These two possibilities are discussed separately
  1670.  below.  In either case, you should activate Open mode BEFORE selecting the
  1671.  file, or previous data will get truncated (i.e. clobbered).  (Actually,
  1672.  GFFT will save the previous file to a backup file, but there is only one
  1673.  level of backup, and you shouldn't depend on this.)  When you use the
  1674.  Spectrum File Select ('S') button, Open mode is automatically activated.
  1675.  
  1676.  If the spectrum file does not already exist when opened, a new blank one
  1677.  is created, just as in Write mode.  You may not Open 'con:'
  1678.  
  1679.  
  1680.  Open for RePlot
  1681.  ----------------
  1682.  
  1683.  To RePlot previously stored spectrum files, you first click the Open
  1684.  button, then select or enter a spectrum file name into the Spectrum File
  1685.  gadget.
  1686.  
  1687.  (If you select a file by using the requester which comes up when you press
  1688.  the 'S' button, 'Open' will automatically be activated, to prevent you
  1689.  from accidentally overwriting a previously stored spectrum.)
  1690.  
  1691.  Then, to replot the spectrum, simply click on the RePlot button.  Do NOT
  1692.  click OK or ReOutput, as those may write additional spectral data to the
  1693.  opened file (as described in the following section).
  1694.  
  1695.  When replotting a previously stored spectrum, you may adjust any of the
  1696.  parameters allowed before using the RePlot button.  For further
  1697.  discussion, see the help message for the RePlot button.
  1698.  
  1699.  You may also use the CombinePlots ('&') and CutCombinedPlot ('X')
  1700.  functions when opening previously stored spectrum files to plot several
  1701.  spectra on the same screen or page.  For example:
  1702.  
  1703.  Click on CombinePlots ('&')
  1704.  Select piano-rect.fft               (Open mode is automatically engaged)
  1705.  Click on RePlot                     (piano-rect.fft is plotted)
  1706.  Press Return                        (Plot screen is removed)
  1707.  Select piano-hann.fft
  1708.  Click on RePlot                     (both .fft's are plotted on the screen)
  1709.  Press Return
  1710.  Select piano-74db.fft
  1711.  Click on RePlot                     (all 3 .fft's are plotted)
  1712.  
  1713.  Now, suppose you wanted to remove piano-74db.fft from the multiple plot
  1714.  display and add piano-92db.fft.  You would continue as follows:
  1715.  
  1716.  Click on CutCombinedPlot ('X')
  1717.  Select piano-92db.fft                (piano-rect.fft, piano-hann.fft and
  1718.                                        piano-92db.fft are plotted)
  1719.  
  1720.  CutCombinedPlot works in the above example as shown (removing
  1721.  piano-74db.fft from the multiple plot display), but doesn't generally work
  1722.  with RePlot in other contexts, such as if you are simply changing plot
  1723.  parameters in between each RePlot using the same spectrum file.  A
  1724.  spectrum file must have a unique name in order to be "cut."  (GFFT
  1725.  will automatically give TEMPORARY files unique names in CombinePlots
  1726.  mode, but that would not apply in this example in which we are replotting
  1727.  previously stored files.)
  1728.  
  1729.  In fact, Open, CombinePlots, RePlot, and/or CutCombinedPlot can sometimes
  1730.  have unexpected consequences when used together.  You should not have any
  1731.  trouble, however, if you follow the underlying model of the example shown
  1732.  here.
  1733.  
  1734.  
  1735.  Open for Appending 'bands'
  1736.  --------------------------
  1737.  
  1738.  Once a particular file has been Opened, each subsequent OK will append
  1739.  additional data to the same file (until another file is Opened or the GFFT
  1740.  session is ended).  Data may not be written to a file while a plot is
  1741.  being performed or displayed, however.
  1742.  
  1743.  This is particularly useful if you are composing a file of spectral data
  1744.  in several frequency "bands."  You may be using data sampled by different
  1745.  methods in separate sample files, or simply analyzed with different
  1746.  numbers of bins or smoothing points depending on the frequency range.  The
  1747.  best way to show this is with a batch mode example, but the same
  1748.  operations could be performed through the dialog window.  (Note:
  1749.  the 'read' command is the counterpart of entering a name into the
  1750.  Sample File gadget.  Here, there is a sample file named 'white.iff')
  1751.  
  1752.      gfft read white.iff write white.fft bins 8192 lowf 0 highf 200 psd
  1753.      gfft read white.iff open white.fft bins 2048 lowf 200 highf 400 psd
  1754.      gfft read white.iff open white.fft bins 1024 lowf 400 highf 800 psd
  1755.      gfft read white.iff open white.fft bins 512 lowf 800 highf 1600 psd
  1756.      gfft read white.iff open white.fft bins 256 lowf 1600 highf 3200 psd
  1757.      gfft read white.iff open white.fft bins 128 lowf 3200 highf 6400 psd
  1758.      gfft read white.iff open white.fft bins 64 lowf 6400 psd
  1759.  
  1760.  (Actually, you wouldn't need to do all this if you merely wanted to have
  1761.  the same number of spectral data points per octave. An easier way to
  1762.  accomplish that would be by using a large number of bins (e.g. 8192) and a
  1763.  smaller number of smoothing points (e.g.  200), with LogX selected.)
  1764.  
  1765.  
  1766. ?Workbench Spectrum-File-Cancel
  1767.  
  1768.  The Spectrum File Cancel button cancels the explicit filename you have
  1769.  entered into the Spectrum File Gadget.  This will cause GFFT to use
  1770.  temporary files for the spectral data written by GFFT to be read by
  1771.  GNUPLOT, which is the default before any explicit filename has been
  1772.  entered.  You may also use this button to "clear" out the old spectrum
  1773.  file name before entering a new one.
  1774.  
  1775.  
  1776. ?Workbench *.fft
  1777.  
  1778.  The '*.fft' button will let GFFT make up a spectrum file name by tacking a
  1779.  '.fft' extension on to the end of the sample file name.  
  1780.  
  1781.  In CLI mode, it is easy to make up such a name using command replay, so
  1782.  this button was created to make explicit file naming just as easy (or
  1783.  actually, easier) in Workbench Mode (so you don't have to copy the whole
  1784.  Sample File name over into the Spectrum File gadget by hand).
  1785.  
  1786.  This button will not do anything useful if you are reading from con:.
  1787.  
  1788.  
  1789. ?Workbench ReOutput
  1790.  
  1791.  The ReOutput button allows you to rewrite the results of the preceding
  1792.  analysis subject to a number of changed parameters.  The FFT analysis
  1793.  itself will not be repeated, only the output processing, writing, and
  1794.  plotting (if applicable).  This is useful for making minor changes after a
  1795.  long analysis without repeating the analysis itself.
  1796.  
  1797.  Here are the parameters which may be changed before a ReOutput:
  1798.  
  1799.         Spectrum File
  1800.         Plot (on or off)
  1801.         Smoothing Segments and Squared Smoothing
  1802.         High Frequency
  1803.         Low Frequency
  1804.         Mean
  1805.         Power
  1806.         Amplitude
  1807.         dB
  1808.         LogX
  1809.         LogY
  1810.         Multiply (CLI only)
  1811.         Sampling Rate
  1812.         Pink
  1813.         Quantization
  1814.         LowY  (see CAL requester)
  1815.         HighY (see CAL requester)
  1816.  
  1817.  Here are just a few parameters which may NOT be changed between OK and
  1818.  ReOutput:
  1819.  
  1820.         Sample File
  1821.         Bins
  1822.         Overlap
  1823.         Window Shape (Rectangle, etc.)
  1824.         Any 3D parameters...in fact, ReOutput is not at all possible with 3D
  1825.         (Pad...from CLI)
  1826.  
  1827.  [Currently, if you change these parameters and ReOutput, you will not get
  1828.  any sort of warning that the changed values have no effect.  They just
  1829.  will not have any effect.]
  1830.  
  1831.  There is also a RePlot button which has generally more limited
  1832.  capabilities, but does allow changing the 3D parameters.
  1833.         
  1834.  
  1835. ?Workbench RePlot
  1836.  
  1837.  The Workbench RePlot button allows you to RePlot the previous analysis or
  1838.  previously stored spectrum file with a few changed parameters.  The
  1839.  spectrum analysis itself, including the output phase, will not be
  1840.  repeated.  Instead, GNUPLOT will simply be launched with with new
  1841.  parameters on the currently named (or temporary) spectrum file.
  1842.  
  1843.  RePlot may be used in conjunction with Open mode to RePlot previously
  1844.  stored spectral data files.  See help for the Open button for further
  1845.  details.
  1846.  
  1847.  Here are the parameters which may be changed before doing a RePlot:
  1848.  
  1849.         Plot (if previously off)
  1850.         LogX (with no smoothing!  LogX w/smoothing requires a ReOutput)
  1851.         LogY
  1852.         RotX
  1853.         RotZ
  1854.         LowFrequency (*see note below)
  1855.         HighFrequency (*see note below)
  1856.         LowY
  1857.         HighY
  1858.  
  1859.  [Currently, if you change any other parameters and RePlot, you will not
  1860.  get any sort of warning that the changed values will have no effect.]
  1861.  
  1862.  (ReOutput permits the modification of many more parameters than RePlot,
  1863.  though it does not permit the repetition of a 3D analysis.  Like RePlot,
  1864.  ReOutput will also produce a new plot if Plot mode is on.)
  1865.  
  1866.  *Note that RePlot does not effect the LowFrequency and HighFrequency in
  1867.  exactly the same way as OK or ReOutput.  OK and ReOutput 'filter' the data
  1868.  written to the output data file so that no data outside the range
  1869.  established by LowFrequency and HighFrequency is written.  RePlot cannot
  1870.  filter the data which has already been written, but instead sends
  1871.  explicit 'set xrange' commands to GNUPLOT.  If you wanted a plot with
  1872.  artificially large left and right 'margins,' you could first do OK (with
  1873.  the desired actual data range set or defaulted), then do a RePlot with
  1874.  LowFrequency and HighFrequency values set outside the range of actual data
  1875.  to the point(s) where you would like the margins to be.  Thus, this
  1876.  difference in the way LowFrequency and HighFrequency are used in RePlot
  1877.  mode is actually a 'feature' which you can take advantage of to change
  1878.  the presentation of a plot.
  1879.  
  1880.  
  1881. ?Workbench Pink
  1882.  
  1883.   * Warning!  The results of this feature may not be entirely 'correct.' *
  1884.  
  1885.  The Pink button engages pink mode, in which a particular sort of
  1886.  frequency-dependent normalization is performed on the spectral output so
  1887.  that pink noise will be shown as having nearly 'flat' response.  The Pink
  1888.  button is a toggle button which may be clicked on or off.
  1889.  
  1890.  (Pink noise is random noise shaped so that there is an equal amount of
  1891.  energy or amplitude in each octave or fractional-octave band.  It is
  1892.  frequently used in acoustic testing.)
  1893.  
  1894.  Pink mode simply weights each output value by a corrective factor; it does
  1895.  not do any grouping and/or averaging (so no resolution is lost).  The
  1896.  current formula does not seem entirely accurate at the lowest frequencies,
  1897.  where the results may vary depending on how many bins are being used.
  1898.  This makes it difficult (or impossible) to splice several curves of pink
  1899.  noise with different numbers of bins together.  In any case, the sum of
  1900.  the squared output values will no longer reflect the sum of the squared
  1901.  input values, in fact, the scale may be offset considerably.  You may
  1902.  choose to use the 'Multiply' command (available in CLI mode; see help for
  1903.  the CLI button) to rescale the results conveniently.
  1904.  
  1905.  (You may also wish to do Smoothing with LogX set when plotting pink noise,
  1906.  and use extremely large sample files with 1,000,000 frames or more to
  1907.  allow for the randomness in pink noise to average out.)
  1908.  
  1909.  
  1910. ?Workbench LogX
  1911.  
  1912.  The LogX button is a toggle button which selects whether the X axis will
  1913.  be scaled logarithmically by GNUPLOT during plotting.  
  1914.  
  1915.  LogX has no effect on the spectral data output by GFFT itself, except that
  1916.  when both Smoothing and LogX are engaged a logarithmic mesh will be used
  1917.  during the smoothing phase.
  1918.  
  1919.  
  1920. ?Workbench LogY
  1921.  
  1922.  The LogY toggle button selects whether the vertical axis will be scaled
  1923.  logarithmically by GNUPLOT during plotting.  It has no effect on the
  1924.  spectral data output by GFFT itself.
  1925.  
  1926.  If a dB conversion is selected with the dB toggle button, LogY is probably
  1927.  not desireable (as this would mean plotting logarithms on a logarithmic
  1928.  scale).
  1929.  
  1930.  LogY is intended to make the vertical axis (representing amplitude or
  1931.  power) logarithmic.  In 3D mode, it is actually the Z axis that is
  1932.  vertical and that represents amplitude or power, so in that mode LogY
  1933.  actually scales the Z axis logarithmically.
  1934.  
  1935.  
  1936. ?Workbench dB
  1937.  
  1938.  The dB toggle button selects whether GFFT will write output amplitude or
  1939.  power values converted to the dB scale.
  1940.  
  1941.  If a dB is selected, LogY is probably not desireable (because then you
  1942.  would be plotting logarithms on a logarithmic scale).
  1943.  
  1944.  
  1945. ?Workbench Power
  1946. ?Workbench Amplitude
  1947.  
  1948.  The Power and Amplitude button are mutually exclusive toggle buttons.
  1949.  Selecting one automatically de-selects the other.  They determine whether
  1950.  GFFT will output Amplitude or "Power" (squared amplitude) values.  By
  1951.  default, GFFT will output Amplitude values.
  1952.  
  1953.  
  1954. ?Workbench Next
  1955.  
  1956.  The Next button will advance to the next sample file selected from the
  1957.  Workbench by extended selection.  If GFFT was invoked without selecting
  1958.  any files by extended selection, or if only one sample file was selected
  1959.  by extended selection, the Next button will be ghosted.
  1960.  
  1961.  
  1962. ?Workbench CLI
  1963.  
  1964.  The CLI button will continue the current session of GFFT from the CLI
  1965.  interface, and will remove the GFFT Dialog Window.  From the CLI
  1966.  interface, you may then return to the GFFT Dialog Window by giving the
  1967.  'Workbench' command.
  1968.  
  1969.  If you started GFFT from the workbench by clicking on its icon, clicking
  1970.  the CLI button will cause a new console window to be created below where
  1971.  the GFFT Dialog Window was for you to work in.  (Under AmigaDOS 1.3, this
  1972.  console window is always there whether you need it or not.)
  1973.  
  1974.  If you started the GFFT dialog from the CLI by giving the 'Workbench'
  1975.  command, control will return to the console from which GFFT was started.
  1976.  
  1977.  Using the WORKBENCH command and the CLI button, you can switch back and
  1978.  forth between WORKBENCH and CLI interfaces.  This might be useful if there
  1979.  are a few commands having no corresponding gadgets in the GFFT Dialog
  1980.  Window which are needed in your application, such as 'Frames' or
  1981.  'StartByte.'  You may also put CLI commands in your .gfft startup file.
  1982.  
  1983.  
  1984. ?Workbench-Message-Display
  1985.  
  1986.  The Message indicator shows an informational message concerning your GFFT
  1987.  session.  Usually, this gives an indication of what sort of user action is
  1988.  expected or required next.  Sometimes, it lets you know of some decision
  1989.  that has been made for you (such as selecting the exact number of bins if
  1990.  you entered a number which was not a power of 2), or how much time the
  1991.  internal FFT loop required.  (Note that the internal FFT loop DOES include
  1992.  some file reading, but not the output file writing, which is handled after
  1993.  the internal FFT loop.  Also, the FFT loop may be repeated many times for
  1994.  a 3D-Time analysis.)
  1995.  
  1996.  If the message 'Performing FFT analysis...' is displayed, the analysis is
  1997.  being performed.  This could take some time.  Additional time may also be
  1998.  required after the FFT loop elapsed time indication appears (to write the
  1999.  output file and invoke GNUPLOT).  Meanwhile, do not attempt to operate on
  2000.  any other gadgets in the GFFT Dialog Window.
  2001.  
  2002.  
  2003. ?CLI
  2004.  
  2005.  The CLI command argument is used to enter CLI-interactive mode when GFFT
  2006.  is run from a shell or shell command.  By default, GFFT now starts in
  2007.  Workbench mode.  For more information about the modes in which GFFT may be
  2008.  run, see 'Help Introduction.'
  2009.  
  2010.  CLI-interactive mode is very much like GNUPLOT.  This type of operation
  2011.  is convenient for some types of work, though it is discouraged by
  2012.  Commodore interface standards.
  2013.  
  2014.  The CLI must be the first and only command argument used.  It may not
  2015.  follow a series of other batch command (non-interactive) arguments.  For
  2016.  example, the following is correct:
  2017.  
  2018.  shell> GFFT CLI
  2019.  
  2020.  while the following is NOT correct:
  2021.  
  2022.  shell> GFFT HANNING CLI
  2023.  
  2024. ?Cli-Commands
  2025. ?Syntax
  2026.  
  2027.  The CLI commands for GFFT are either entered all in one line (for
  2028.  batch mode) or one for each prompted line (for interactive mode).
  2029.  
  2030.  The GFFT commands are not case sensitive.  They may each be abbreviated
  2031.  to the shortest unambiguous string.
  2032.  
  2033.  You may enclose filenames in either single or double quotation marks.
  2034.  This may help gfft distinguish it from the command itself.  Though no
  2035.  ambiguity could (currently) arise in CLI Interactive mode since only one
  2036.  command is permitted per line, there might otherwise be an ambiguity in
  2037.  CLI Batch mode.
  2038.  
  2039.  Most commands actually set some parameter for later use.  The OK or GO
  2040.  commands actually initiate a spectrum analysis.  That is when all
  2041.  previously specified settings are actually used (and incompatibilities
  2042.  might be detected).
  2043.  
  2044.  In the syntax descriptions for some commands, square brackets like [this]
  2045.  enclose optional arguments, and angle brackets like <this> enclose
  2046.  arguments generally, while the un-enclosed words are the command(s)
  2047.  themselves.
  2048.  
  2049.  
  2050. ??
  2051. ?help
  2052.  
  2053.  The HELP and ? commands display a list of commands available in GFFT,
  2054.  along with some hints and other helpful information.  If an argument is
  2055.  specified, help for that keyword or command is displayed.
  2056.  
  2057.  Syntax:
  2058.  
  2059.      ?
  2060.      help
  2061.      help <command or keyword>
  2062.  
  2063.  
  2064. ?About
  2065.  
  2066.  The About command displays information about the author of GFFT and how
  2067.  you can support its future development.
  2068.  
  2069.  
  2070. ?Amplitude
  2071. ?Power
  2072.  
  2073.  The Amplitude and Power commands are mutually exclusive.  Selecting one
  2074.  automatically cancels the other.  They determine whether GFFT will output
  2075.  Amplitude or "Power" (squared amplitude) values.  By default, GFFT will
  2076.  output Amplitude values.
  2077.  
  2078.  
  2079. ?Append
  2080. ?Open
  2081.  
  2082.  The Open and Append commands are identical (in this release, anyway).
  2083.  
  2084.  Syntax:
  2085.  
  2086.      append [<filename>]
  2087.      open [<filename>]
  2088.  
  2089.  The Open command is similar to the Write command (see) in that it will
  2090.  open a spectrum file which may be read or plotted by GNUPLOT.  However,
  2091.  the Open command will cause any data written to this file to be appended
  2092.  to the end of existing data, if any, while the Write command would cause
  2093.  the file to be rewritten from the beginning.  If the named file does not
  2094.  already exist, the Open command will create one (just as the Write command
  2095.  does).
  2096.  
  2097.  Open may also be used to open a previously stored spectrum file so that it
  2098.  may be plotted with the RePlot command.  Once a file has been opened, it
  2099.  may be plotted with RePlot, and parameters such as HighFrequency,
  2100.  LowFrequency, LogX, and LogY may be adjusted.  If you are using Open in
  2101.  this way, be sure NOT to give the OK or ReOutput commands, or else GFFT
  2102.  may write more data at the end of the opened file.  See help for the
  2103.  RePlot command for a discussion of which parameters may be adjusted.
  2104.  
  2105.  The Open command is normally given with one argument: the filename (which
  2106.  may include device and/or absolute or relative directory specifiers).  If
  2107.  the Open command is given without any arguments, GFFT will make a
  2108.  temporary file to plot from (assuming plot mode is enabled).  At the end
  2109.  of the GFFT session, this temporary file will be deleted (if the plot is
  2110.  no longer being displayed).
  2111.  
  2112.  Once a particular file has been opened with Open, each subsequent OK
  2113.  command will append additional data to the same file (until another Open
  2114.  or WRITE command is given, or the GFFT session is ended).  Note that data
  2115.  may not be written to a file while a plot is being performed or displayed,
  2116.  however.
  2117.  
  2118.  Open is particularly useful if you are composing a file of spectral data
  2119.  in several frequency "bands."  You may be using data sampled by different
  2120.  methods, or analyzed with different numbers of bins or smoothing points
  2121.  depending on the frequency range.
  2122.  
  2123.  Example:
  2124.  
  2125.      gfft read white write white.fft bins 8192 lowf 0 highf 200 psd
  2126.      gfft read white open white.fft bins 2048 lowf 200 highf 400 psd
  2127.      gfft read white open white.fft bins 1024 lowf 400 highf 800 psd
  2128.      gfft read white open white.fft bins 512 lowf 800 highf 1600 psd
  2129.      gfft read white open white.fft bins 256 lowf 1600 highf 3200 psd
  2130.      gfft read white open white.fft bins 128 lowf 3200 highf 6400 psd
  2131.      gfft read white open white.fft bins 64 lowf 6400 psd
  2132.  
  2133.  (Actually, you wouldn't need to do all this if you merely wanted to have
  2134.  the same number of spectral data points per octave. An easier way to
  2135.  accomplish that would be by using a large number of bins (e.g. 8192) and a
  2136.  smaller number of smoothing points (e.g.  200), with LogX selected.)
  2137.  
  2138.  If you want to comparatively plot several different spectra during the
  2139.  plotting phase, use the CombinePlots command instead of the Open command,
  2140.  or, in addition to it if you are replotting previously stored spectrum
  2141.  files (see below).  CombinePlots will cause each different spectrum to be
  2142.  plotted with a different color (or linetype) with a legend identifying
  2143.  each one.
  2144.  
  2145.  While you are using Open to open previously written spectral data files
  2146.  and RePlot to plot them, you may also use CombinePlots to overlay each of
  2147.  these spectra into one plot.
  2148.  
  2149.  Example:
  2150.  
  2151.      sys> gfft
  2152.  
  2153.      gfft> combineplots
  2154.      gfft> open piano.fft.rect
  2155.      gfft> RePlot
  2156.      gfft> open piano.fft.hann
  2157.      gfft> RePlot                 ;plots both ...rect and ...hann
  2158.      gfft> open piano.fft.74dB
  2159.      gfft> RePlot                 ;plots ...rect, ...hann, and ...74db
  2160.      gfft> CutCombinedPlot
  2161.      gfft> open piano.fft.92dB
  2162.      gfft> RePlot                 ;plots ...rect, ...hann, and ...92db
  2163.  
  2164.  CutCombinedPlot works in the above example as shown (replacing
  2165.  piano.fft.74db with piano.fft.92db with an Open command), but doesn't
  2166.  generally work with RePlot if you are only changing parameters (it works
  2167.  best if you are changing the actual filename), nor does CombinePlots work
  2168.  with Open and RePlot if you are only changing parameters (and not adding
  2169.  files with different names) between each RePlot.  The example shown here
  2170.  works, but Open, CombinePlots, RePlot, and/or CutCombinedPlot can
  2171.  sometimes have unexpected consequences when used together.  You should not
  2172.  have any trouble, however, if you follow the model of the example shown
  2173.  here.
  2174.  
  2175.  You may not Open 'con:'
  2176.  
  2177.  
  2178. ?Banner
  2179.  
  2180.  The Banner command displays the GFFT banner, which normally comes up when
  2181.  you start GFFT in CLI-interactive mode.  (This might be useful if you are
  2182.  running GFFT in batch mode but nevertheless want to have the GFFT banner
  2183.  displayed.)
  2184.  
  2185.  
  2186. ?Bins
  2187.  
  2188.  The Bins command lets you choose or default the number of bins to be used.
  2189.  It is followed by an (optional) integer argument.  By default, GFFT
  2190.  chooses the maximum number of bins which could be put to use (considering
  2191.  the number of sample frames, and the current Overlap, Pad, Interleave and
  2192.  other settings).  If you have a large sample file, or wish to reduce the
  2193.  spectral variance by averaging successive frame segments, you should
  2194.  choose a smaller number of bins than the maximum.
  2195.  
  2196.  1024 is a typical number of bins, though I usually use more.  You should
  2197.  enter a value which is a power of 2.  If you do not, however, GFFT will
  2198.  choose the next power of two for you and indicate the actual value chosen.
  2199.  
  2200.  Once set explicitly, the same number of bins will be used for the present
  2201.  and all future sample files read in the same GFFT session.
  2202.  
  2203.  If you enter the Bins command with no argument, the default (maximum) bins
  2204.  mode will be re-engaged.  In the default mode, you will be alerted as to
  2205.  the actual number of bins used after the OK command is given for each file
  2206.  analyzed.
  2207.  
  2208.  By default, GFFT attempts to make use of all data present either by using
  2209.  the largest number of bins and/or by by averaging the data segments (whose
  2210.  length is 2*N where N is the number of bins) present to reduce the
  2211.  spectral variance.  If you wish GFFT to limit analysis to a smaller number
  2212.  of data points within you file, you may use the Frames and/or StartFrames
  2213.  commands.
  2214.  
  2215.  By default, GFFT will also use Overlap to provide even more data segments,
  2216.  resulting in a further reduction of variance.  (See the Overlap command
  2217.  for further information.)  Overlap may be disengaged with the NoOverlap
  2218.  command.
  2219.  
  2220.  
  2221. ?Bits
  2222.  
  2223.  The Bits command lets you set the number of bits used in the
  2224.  representation of each input datum in an unformatted input sample file.
  2225.  Normally, the number is either 8 or 16, but you may specify any number
  2226.  between 1-16 inclusive.  (The handling of numbers other than 8 and 16 is
  2227.  as specified for the AIFF format--i.e., the least significant bits are
  2228.  ignored first.)
  2229.  
  2230.  Syntax:
  2231.  
  2232.      Bits <number of bits: integer 1-16>
  2233.  
  2234.  Note that the argument for this command is mandatory.
  2235.  
  2236.  If a Bits command is given BEFORE the header of a formatted sample file is
  2237.  read with a READ command, the number of bits specified in the sample file
  2238.  header will supercede the number specified in the Bits command.  If the
  2239.  Bits command is given AFTER the READ command, the number in the Bits
  2240.  command will supercede the number specified in the sample file header.
  2241.  
  2242.  The default for unformatted sample files is 8 bit.
  2243.  
  2244.  
  2245. ?74dB-Blackman-Harris
  2246.  
  2247.  The 74db-Blackman-Harris command selects windows of a particular shape.
  2248.  These windows will be applied to the sample data in segments whose size is
  2249.  determined by the number of bins.  This command cancels the effect of any
  2250.  preceding window shape command.
  2251.  
  2252.  The Blackman-Harris 74dB window is a nearly optimal window according to
  2253.  criteria developed by Harris.  It is superior to most other windows in
  2254.  sidelobe rejection.  The '74dB' refers to a 74dB minimum sidelobe
  2255.  rejection.  GFFT also provides the 92dB-Blackman-Harris window which has
  2256.  even greater sidelobe rejection, but also suffers considerably from a loss
  2257.  of selectivity (or, more precisely, 'processing loss.')
  2258.  
  2259.  
  2260. ?92dB-Blackman-Harris
  2261.  
  2262.  The 92db-Blackman-Harris command selects windows of a particular shape.
  2263.  These windows will be applied to the sample data in segments whose size is
  2264.  determined by the number of bins.  This command cancels the effect of any
  2265.  preceding window shape command.
  2266.  
  2267.  The Blackman-Harris 92dB window has the highest sidelobe rejection of all
  2268.  windows studied by Harris.  In fact, the '92dB' refers to the impressive
  2269.  92dB sidelobe rejection, so any spectral feature you see is that much more
  2270.  likely to be a real spectral feature (provided data of sufficient quality
  2271.  and quantity).  Unfortunately, it also suffers considerably from a
  2272.  corresponding "processing loss" in comparison with other windows included
  2273.  in this program, so that many real features may be smeared and hidden.
  2274.  Ultimately, each window has its own unique set of compromises.
  2275.  
  2276. ?Calibration
  2277. ?DbCalibration
  2278. ?NoCalibration
  2279.  
  2280.  Syntax:
  2281.  
  2282.  Calibration <Calibration File Name>
  2283.  DbCalibration <Calibration File Name>
  2284.  NoCalibration
  2285.  
  2286.  The Calibration command enables you to apply a 'calibration' to the output
  2287.  of GFFT.  In this way, you can compensate for the frequency response of
  2288.  your sampler, microphone, noise source, etc.  Any number of calibrations
  2289.  may be in effect at the same time.  Each time the Calibration (or
  2290.  DbCalibration) command is given, a new calibration is linked into the
  2291.  existing list of calibrations.  The NoCalibration command cancels the
  2292.  entire list of calibrations.  The DbCalibration command allows you to use
  2293.  a file in which the amplitudes are in dB (logarithmic) form.  Calibrations
  2294.  and DbCalibrations may be applied to spectrums in any combination
  2295.  regardless of whether the final output is in dB form or not.
  2296.  
  2297.  The calibration file(s) should be in the same format as the output files
  2298.  produced by GFFT itself.  Each line (terminated by newline) should have a
  2299.  frequency value, any number of spaces, and an amplitude value (NOT a
  2300.  'power' or squared amplitude value!).  The frequencies must be in
  2301.  increasing order, and the range of frequencies must be equal to or greater
  2302.  than that to be output by GFFT (see warning below).  Lines beginning with
  2303.  one of the following characters are considered to be comments:
  2304.  
  2305.      # ; !
  2306.  
  2307.  If a spectrum is calibrated by itself, the result should be a straight
  2308.  line at either 1.0 or 0.0 (for dB output).  Actually, due to slight
  2309.  rounding errors, the actual result will be close to, but not exactly these
  2310.  ideal values (e.g. 0.9999998).  Given that Gnuplot will always scale the Y
  2311.  axis to the maximum magnification, these small differences may be
  2312.  disconcerting.  To minimize this effect, consider setting the LowY and/or
  2313.  HighY values to fix the vertical range.  You may also use the Quantization
  2314.  command to apply a quantization to the output (but, that may cause other
  2315.  problems).
  2316.  
  2317.  Calibration as used here is unrelated to true complex 'correlation,' which
  2318.  is not currently available in GFFT.  Calibration has somewhat limited
  2319.  accuracy and validity, but is still probably a feature worth having for
  2320.  its usefulness.  Note that in between points specified in a calibration
  2321.  file, simple linear interpolation may be used.  If a frequency higher than
  2322.  the highest calibration frequency is output by GFFT, it will be calibrated
  2323.  by the value for the highest calibration frequency, and likewise for any
  2324.  frequency lower than the lowest calibration frequency.  In other words,
  2325.  GFFT extends the last calibration value rather than extrapolating.
  2326.  (WARNING!  This could be dangerous if interpreted improperly!  Remember to
  2327.  provide calibrations over a range equal to or greater than the range to be
  2328.  output by GFFT.)  GFFT does not truncate to the calibration range because
  2329.  rounding errors may cause premature truncation.
  2330.  
  2331.  One way to use the Calibration command is to perform a GFFT analysis on
  2332.  your signal source itself, and then apply that result as a 'calibration'
  2333.  to your test measurements.  Another way is to write frequency response
  2334.  data provided by a calibration laboratory into a suitable calibration
  2335.  file.  (Many microphones, for example, are provided with calibration
  2336.  curves that could be used for this purpose.)
  2337.  
  2338.  
  2339. ?Channel
  2340.  
  2341.  The Channel command selects a particular channel for a file in a format
  2342.  (e.g. AIFF) which supports multiple channels.  The desired channel number
  2343.  is entered as a digit.  If the Channel command is given with no arguments,
  2344.  the default (1) channel (which is valid for all files, whether they have
  2345.  channels or not) is selected.  You must select a valid channel number
  2346.  before giving the OK command or no analysis will be performed.
  2347.  
  2348.  
  2349. ?CombinePlots
  2350. ?NoCombinePlots
  2351. ?CutCombinedPlot
  2352.  
  2353.  The CombinePlots command activates CombinePlots mode.  In this mode,
  2354.  successive spectra (i.e. 'plots') are overlaid on top of one another.
  2355.  Each spectrum is plotted with a different color (or linetype, if plotting
  2356.  on a black and white printer) by GNUPLOT.  The x and y axis are
  2357.  automatically scaled so as to include the largest x and y values of any
  2358.  spectrum included, unless you have opted to fix the HighY and LowY values.
  2359.  
  2360.  When the first CombinePlots command is given, the previously completed
  2361.  spectrum (if any) is used as the first data set for the plotter, the next
  2362.  completed spectrum becomes the second data set, and so on.
  2363.  
  2364.  If a subsequent CombinePlots command is given when already in CombinePlots
  2365.  mode, it is ignored.
  2366.  
  2367.  To disable CombinePlots mode, enter the NoCombinePlots command.  All
  2368.  previously combined plots are 'cut' off, so that if another CombinePlots
  2369.  command is given immediately, a new plot combination starts from scratch.
  2370.  
  2371.  To 'cut' only the last plot, give the CutCombinedPlot command.  To cut
  2372.  several plots from the plot combination, enter CutCombinedPlot several
  2373.  times.  Each time CutCombinedPlot is entered, one more plot is cut from
  2374.  the end until there are no more plots to be cut.  This is a useful way to
  2375.  cut plots that didn't quite work out without starting over.
  2376.  
  2377.  (CutCombinedPlot used in conjunction with RePlot can have unexpected
  2378.  consequences.  See help for the Open command for a working example; many
  2379.  other combinations of these commands won't work as might be intended.)
  2380.  
  2381.  Combine plots mode is very useful for comparing the effect of different
  2382.  parameters (e.g. window type), or for comparing alternate sets of data
  2383.  representing the same source (e.g. to get a feel for the variance due to
  2384.  sampling size limitations--this is extremely useful for seeing which
  2385.  spectral features are truly inherent in the source and not the result
  2386.  of an inadequately large sample file.  Note that very large sample files
  2387.  (e.g. > 1,000,000 frames) may be necessary to reduce the variance of
  2388.  a pink noise source in the low frequency ranges.)
  2389.  
  2390.  Example:
  2391.  
  2392.      gfft>read pink1.iff
  2393.      gfft>bins 4096
  2394.      gfft>logx 
  2395.      gfft>db
  2396.      gfft>smoothingsegments 300
  2397.      gfft>pink
  2398.      gfft>ok
  2399.      gfft>combineplots
  2400.      gfft>read pink2.iff
  2401.      gfft>ok
  2402.  
  2403.  In this example, pink1.iff and pink2.iff are two samples of pink noise.
  2404.  If they are both large enough, their spectral lines will be overlaid
  2405.  nearly on top of one another.  In any case, the extent of their divergence
  2406.  will give an approximate feel for the variance.
  2407.  
  2408.  
  2409. ?Copying
  2410.  
  2411.  The Copying command will display the GNU General Public License under
  2412.  which this program is being distributed.  This specifies your rights to
  2413.  have the source code and to give out copies of this program.
  2414.  
  2415.  (Note: This command requires that the file named COPYING was placed either
  2416.  in the same directory as GFFT or in the S: directory, as specified in the
  2417.  file named INSTALLATION.  If this file has been lost, you may obtain
  2418.  another copy from the Free Software Foundation, Inc., 675 Mass Ave,
  2419.  Cambridge, MA 02139, USA.  Please do not ask them any other questions
  2420.  about this program.)
  2421.  
  2422.  
  2423. ?dB
  2424. ?NodB
  2425.  
  2426.  The dB command instructs GFFT to write output amplitude or power values
  2427.  converted to the dB scale.  The NodB command cancels this.
  2428.  
  2429.  If dB is engaged, LogY is probably not desireable, as then you would be
  2430.  plotting logarithms on a logarithmic scale.  (LogY causes GNUPLOT to use a
  2431.  logarithmically scaled Y axis, but does not otherwise modify the data file
  2432.  written by GFFT.)
  2433.  
  2434.  You will get a warning if any spectral values are equal to zero.  Such
  2435.  values will not be output as they cannot be converted to the dB scale.
  2436.  
  2437.  
  2438. ?Exit
  2439. ?Quit
  2440.  
  2441.  The Quit or Exit command is used to end an interactive session of GFFT.
  2442.  As GFFT is terminating, it will delete all temporary files it has created
  2443.  if they are no longer in use.  The temporary files corresponding to 
  2444.  plots or help messages still being displayed will not be deleted.
  2445.  In that case, be sure to remove all help message and plot displays before
  2446.  beginning a second GFFT session.
  2447.  
  2448.  Warning!  GFFT will also delete your files, if they match the masks
  2449.  it uses for its temporary files: 
  2450.  
  2451.      t:temp-#?.fft-#?
  2452.      ram:cli.temp-gfft-#?
  2453.      ram:gnuplot.temp-gfft-plot
  2454.      ram:temp-gfft-more-#?
  2455.  
  2456.  As you can see, however, this isn't very likely.
  2457.  
  2458.  
  2459. ?FFT-Complex
  2460.  
  2461.  The FFT-Complex command changes the operation of GFFT fundamentally.
  2462.  Instead of producing a plottable 2d (or 3D-Time) spectrum analysis, GFFT
  2463.  will simply output (not plot) a file containing the Complex FFT of the
  2464.  input data provided.  (It is complex in that for each frequency there are
  2465.  'real' and 'imaginary' components).  This will be done when the OK command
  2466.  is given.
  2467.  
  2468.  Beware that few of the parameters provided in GFFT are applicable to
  2469.  FFT-Complex operation.  Only one data segment (whose size based on the Bin
  2470.  specification) will be analyzed.
  2471.  
  2472.  
  2473. ?Frames
  2474.  
  2475.  The Frames command determines how many frames from the sample file will be
  2476.  read and used by GFFT.  It accepts one argument--the number of frames.  If
  2477.  no argument is given, the default is restored.  By default, the number of
  2478.  frames read and used by GFFT is the total number of frames in the file (if
  2479.  possible--of course, the number of frames actually used may be less than
  2480.  that if the Overlap (see) mode is turned off).
  2481.  
  2482.  (If you are unfamiliar with the 'frame' terminology, for the purposes of
  2483.  GFFT one 'frame' is the same as one 'data point,' or 'number.'  Some sample
  2484.  file formats permit more than one channel, and frequently the data points
  2485.  for all channels present are combined in each 'frame' which consists of
  2486.  all the samples taken for all channels to represent one instant of time.
  2487.  Currently, GFFT can only use the data for one channel at a time, but the
  2488.  'frame' terminology has been adopted because it is the most general.  The
  2489.  term 'sample' is ambiguous because sometimes it may refer to an individual
  2490.  data point, and other times it may refer to an entire file of data points.
  2491.  I have tried to consistently use the term 'sample file' here when
  2492.  referring to such a file.
  2493.  
  2494.  
  2495. ?Go
  2496. ?OK
  2497.  
  2498.  The OK command initiates an FFT according to all the specified parameters.
  2499.  The Go command is identical.
  2500.  
  2501.  The selected sample file will be read and transformed, the spectrum file
  2502.  (if any) which has been selected with a Write or Open command will be
  2503.  written to, and a PLOT will be produced if the Plot option is enabled.
  2504.  
  2505.  This command is invalid if any parameters have been set incorrectly, if no
  2506.  sample file has been selected, or if no spectrum file has been explicitly
  2507.  specified AND the PLOT option is not enabled (as there would be no point
  2508.  in writing to a temporary spectrum file only to delete it).
  2509.  
  2510.  It may not be necessary to give the OK command in Batch-CLI mode because
  2511.  it may be implied by the commands given and the end of the command line.
  2512.  
  2513.  Example:
  2514.  
  2515.      sys> gfft
  2516.      gfft> read piano.iff
  2517.      gfft> plot
  2518.      gfft> ok
  2519.  
  2520.  Batch Examples:
  2521.  
  2522.      gfft read piano.iff write piano.fft
  2523.      gfft read piano.iff hann write piano.hann ok hamming write piano.hamm
  2524.  
  2525.  In the first batch example, no OK command is necessary because sample and
  2526.  spectrum files are specified for which no OK command is given.  In the
  2527.  second batch example, two output files are written, OK is necessary to
  2528.  write the first, but not necessary for the second.  (See help for 'Batch'
  2529.  for further information about batch mode).
  2530.  
  2531.  Note: depending on the size of the sample file, the number of bins and
  2532.  other parameters you have set, as well as the CPU and/or FPU resources
  2533.  available, an FFT analysis could take anywhere between a fraction of a
  2534.  second to several weeks.  So, if you don't get an immediate response, have
  2535.  faith that GFFT is working, not hanging.  If there is any error, GFFT
  2536.  should let you know right away.  If it is working away on your file, and
  2537.  the number of bins is small compared with the size of your sample file,
  2538.  you will see the disk light flickering occasionally as GFFT reads in each
  2539.  additional data segment.
  2540.  
  2541.  
  2542. ?Hamming
  2543.  
  2544.  The Hamming button selects windows of a particular shape.  These windows
  2545.  will be applied to the data in segments whose size is determined by the
  2546.  number of bins.  The Hamming command cancels the effect of any preceding
  2547.  window shape command.
  2548.  
  2549.  The Hamming window is superior to the Rectangle, Triangle, Parzen, and
  2550.  Hann windows in sidelobe rejection.  The formula used here is from Harris.
  2551.  
  2552.  
  2553. ?Hann
  2554.  
  2555.  The Hann button selects windows of a particular shape.  These windows will
  2556.  be applied to the data in segments whose size is determined by the number
  2557.  of bins.  The Hann command cancels the effect of any preceding window
  2558.  shape command.
  2559.  
  2560.  The 'Hann Window' is frequently mis-named as the 'Hanning Window.'
  2561.  Actually, Hann-ing (or Hann'd) is a kind of verb which attests to the
  2562.  popularity of this window in instrumentation.  It is superior to the
  2563.  Rectangle, Triangle, and Parzen windows in sidelobe rejection.  The
  2564.  formula used here is from Harris.
  2565.  
  2566.  
  2567. ?Hidden3D
  2568. ?NoHidden3D
  2569.  
  2570.  The Hidden3D command enables hidden line removal in 3D plot displays.
  2571.  The NoHidden3D disables this feature.  It is disabled by default.
  2572.  
  2573.  I find the hidden line 3D display to be the most readable, though some
  2574.  useful data may be hidden.
  2575.  
  2576.  GNUPLOT has other 3D display features which are not yet supported by GFFT,
  2577.  such as contour plots (with many contour parameters).  If there are any
  2578.  particular ones you would like to be able to control from GNUPLOT, please
  2579.  let me know.  (I'm probably just going to add a generic GNUPLOT option
  2580.  control facility in a future release.)
  2581.  
  2582.  
  2583. ?HighFrequency
  2584.  
  2585.  The HighFrequency command allows you to select the highest frequency to be
  2586.  output (and plotted, if applicable) up to the Nyquist frequency, which is
  2587.  one-half of the sampling rate.  Any positive number (integer or floating
  2588.  point) may be given as an argument.  If no argument is given, the default
  2589.  is restored in which the highest frequency output and plotted is
  2590.  automatically the Nyquist frequency.
  2591.  
  2592.  Using the HighFrequency and LowFrequency commands, you can zoom in to see
  2593.  a particular part of the spectrum more clearly.
  2594.  
  2595.  If a HighFrequency is selected prior to a RePlot command, that value is
  2596.  given in a range specification to GNUPLOT.  Otherwise, the effect of a
  2597.  selected HighFrequency is to filter the output file produced by GFFT, and
  2598.  GNUPLOT is allow to autorange.  (This may result in a slight difference in
  2599.  how the axes are drawn by GNUPLOT, and may be used to your advantage
  2600.  during RePlot as you can then increase or decrease the right margin if
  2601.  desired.)
  2602.  
  2603.  
  2604. ?HighY
  2605.  
  2606.  The HighY command allows you to set the lowest value to be shown on the
  2607.  vertical axis used for plotting by GNUPLOT.  Using this command, you can
  2608.  'zoom in' or 'zoom out' vertically into the plot.  This command has no
  2609.  effect on the data file written by GFFT.  If the HighY command is given
  2610.  without any arguments, the HighY value will be automatically determined by
  2611.  GNUPLOT autoscaling.
  2612.  
  2613.  Syntax:
  2614.  
  2615.      HighY [<highest Y value: double>]
  2616.  
  2617.  Note that GNUPLOT might do strange things if you specify a HighY value
  2618.  without also specifying a LowY value.  It may, for example, decide to run
  2619.  the Y axis upside down in order to show the widest range of Y values.  Or,
  2620.  if less than one Y unit would be plotted when autoscaling one value,
  2621.  GNUPLOT may decide the Y range is invalid.  Be forewarned.
  2622.  
  2623.  In 3D mode, the vertical axis (representing amplitude or power) is
  2624.  actually the Z axis, so then the HighY value is applied to the Z axis.
  2625.  
  2626.  
  2627. ?IgnoreFormat
  2628. ?NoIgnoreFormat
  2629.  
  2630.  The IgnoreFormat causes GFFT to ignore the format of a file which it
  2631.  recognizes.  Currently, GFFT recognizes IFF, AIFF, AIFF-C, AVR, RIFF, and
  2632.  VOCH formats, though it is only capable of processing IFF-8SVX, AIFF,
  2633.  AIFF-C, and AVR formats (and ONLY if UNCOMPRESSED).  Thus, IgnoreFormat
  2634.  may allow you to read files in RIFF, VOCH, and other IFF formats, though
  2635.  you will be responsible for setting parameters such as StartByte, Frames,
  2636.  and Rate yourself, and there is no guarantee that even after setting these
  2637.  parameters that GFFT will read the data properly (not to imply that there
  2638.  is any guarantee anyway).
  2639.  
  2640.  This feature should be used with caution and only by those who are well
  2641.  versed in the format of the files they are going to read.
  2642.  
  2643.  If you would like GFFT to support some additional file formats, please
  2644.  contact the author and considering hiring him to do this or making a
  2645.  regular or contingent donation.  See the README file for details.
  2646.  RIFF and VOCH formats might be included in a future release.
  2647.  
  2648.  The NoIgnoreFormat command cancels the effect of a previous IgnoreFormat
  2649.  command.
  2650.  
  2651.  
  2652. ?Key
  2653.  
  2654.  The KEY command allows you to enter a "registration" key.  With the
  2655.  registration key, you will not be required to click away one or more
  2656.  requesters when running GFFT on the workbench.
  2657.  
  2658.  Normally, once you are given a key, you would add a key command to the
  2659.  tooltypes of the GFFT icon, or, if you normally start GFFT from the CLI,
  2660.  you would add the key command to the .gfft startup file.  The key tooltype
  2661.  or command would look like this:
  2662.  
  2663.      key=1234567890
  2664.  
  2665.  The README file and/or the requester(s) that come up will explain how to
  2666.  register for GFFT so that you can obtain the key.
  2667.  
  2668.  
  2669. ?Interleave
  2670. ?NoInterleave
  2671.  
  2672.  * Note: this command is EXPERIMENTAL (even more than the others). *
  2673.  * The theoretic validity of this technique is not well understood. *
  2674.  
  2675.  The Interleave command tells GFFT to average the results of FFT's
  2676.  performed on alternate samples.  For example, 'Interleave 2' tells GFFT to
  2677.  perform two FFT's, one on the odd frames and one on the even frames, and
  2678.  then to average the results.  'Interleave 3' would tell GFFT to perform 3
  2679.  such FFT's, and so on.  The NoInterleave command may be used to cancel
  2680.  interleave mode.  Interleave on any non-positive or non-integer number is
  2681.  invalid, and interleave set to 1 would be meaningless (it would be the
  2682.  same as NoInterleave).
  2683.  
  2684.  Syntax:
  2685.  
  2686.      Interleave <interleave-factor: integer in the range 2 - huge>
  2687.      NoInterleave
  2688.  
  2689.  This is a counterpart to the ordinary way of averaging the results of FFT
  2690.  performed on successive segments (which may also be done at the same time
  2691.  if possible).  While dividing up a file into more than the minimum number
  2692.  of segments (i.e., with less than the maximum number of bins) does not
  2693.  reduce the highest frequency for which an FFT value is computed, it does
  2694.  increase the lowest non-zero frequency for which an FFT value is computed
  2695.  (i.e., the low frequency resolution is lost).  Meanwhile, Interleave does
  2696.  not increase the lowest non-zero frequency, but instead reduces the the
  2697.  highest frequency (leaving the low frequency resolution intact).
  2698.  
  2699.  Unfortunately, though the utility of this feature seemed compelling for
  2700.  analyzing a spectrum in bands (using Interleave averaging for the low
  2701.  frequencies and typical 'bin' averaging for the high frequencies) the
  2702.  results indicate there is some theoretical error here which I still don't
  2703.  fully understand, as I haven't been able to get the bands to meet.  I
  2704.  think I understand the reason for this, but I don't understand it well
  2705.  enough to know how to compensate for it.  Meanwhile, I have found no
  2706.  discussion of this 'interleaving' or 'alternating' technique in the
  2707.  literature.
  2708.  
  2709.  
  2710. ?LogX
  2711. ?NoLogX
  2712.  
  2713.  The LogX command will cause GNUPLOT to scale the x-axis logarithmically
  2714.  during plotting (if plot mode is set).  It has no effect on the spectral
  2715.  data output by GFFT itself, except when a number of smoothing segments are
  2716.  being applied.  When smoothing with LogX on, a logarithmic mesh will be
  2717.  used during the smoothing phase.  
  2718.  
  2719.  The NoLogX command cancels the effect of the LogX command.
  2720.  
  2721.  
  2722. ?LogY
  2723. ?NoLogY
  2724.  
  2725.  The LogY command will cause GNUPLOT to scale the vertical axis
  2726.  logarithmically during plotting (if plot mode is set).  It has no effect
  2727.  on the spectral data output by GFFT itself.  The NoLogY command cancels
  2728.  the effect of the LogY command.
  2729.  
  2730.  If a dB conversion is selected with the dB command, LogY is probably
  2731.  not desireable (as this would mean plotting logarithms on a logarithmic
  2732.  scale).
  2733.  
  2734.  LogY is intended to make the vertical axis (representing amplitude or
  2735.  power) logarithmic.  In 3D mode, it is actually the Z axis that is
  2736.  vertical and that represents amplitude or power, so in that mode LogY
  2737.  actually scales the Z axis logarithmically.
  2738.  
  2739.  
  2740. ?LowFrequency
  2741.  
  2742.  The LowFrequency command allows you to select the lowest frequency to be
  2743.  output (and plotted, if applicable).  By default, GFFT outputs and plots
  2744.  the lowest non-zero frequency.  You may specify 0 or any other floating
  2745.  point number as the argument to a LowFrequency command.  If no argument is
  2746.  specified, the LowFrequency command restores the default.
  2747.  
  2748.  Although the FFT process yields a value for the 0 frequency (e.g. D.C.),
  2749.  typical FFT analyzers do not display it because it may display a
  2750.  considerable offset caused by the sampling hardware.
  2751.  
  2752.  Once you specify a LowFrequency, it will remain in effect for the current
  2753.  sample file and any additional files processed in the same GFFT session.
  2754.  
  2755.  Note that the LowFrequency is handled differently by RePlot than by OK and
  2756.  ReOut.  See help for the RePlot command for further information.
  2757.  
  2758.  
  2759. ?LowY
  2760.  
  2761.  The LowY command allows you to set the lowest value to be shown on the
  2762.  vertical axis used for plotting by GNUPLOT.  Using this command, you can
  2763.  'zoom in' or 'zoom out' vertically into the plot.  This command has no
  2764.  effect on the data file written by GFFT.  If the LowY command is given
  2765.  without any arguments, the LowY value will be automatically determined by
  2766.  GNUPLOT autoscaling.
  2767.  
  2768.  Syntax:
  2769.  
  2770.      LowY [<lowest Y value: double>]
  2771.  
  2772.  Note that GNUPLOT might do strange things if you specify a LowY value
  2773.  without also specifying a HighY value.  It may, for example, decide to run
  2774.  the Y axis upside down in order to show the widest range of Y values.  Or,
  2775.  if less than one Y unit would be plotted when one value is autoscaled,
  2776.  GNUPLOT may decide the Y range is invalid.  Be forewarned.
  2777.  
  2778.  In 3D mode, the vertical axis (representing amplitude or power) is
  2779.  actually the Z axis, so the value selected for LowY is then applied to the
  2780.  Z axis.
  2781.  
  2782.  
  2783. ?Mean
  2784. ?Sum
  2785.  
  2786.  The Mean command instructs GFFT to write 'mean' (average) values, which
  2787.  is what it does by default.  The Sum command instructs GFFT to write
  2788.  'summed' values,  which are summed but not averaged (not divided by
  2789.  the number of frames and segments).
  2790.  
  2791.  Mean values are equivalent to Root Mean Square (RMS) Amplitude or Mean
  2792.  Square Power (actually, squared amplitude) values.  Note that by default
  2793.  GFFT normalizes Mean outputs to the level of total actual amplitude
  2794.  or power within each bin.  There are two commands, PSDensity and Pink,
  2795.  which alter this default normalization.
  2796.  
  2797.  I do not recommend the use of the Sum command, except for debugging
  2798.  purposes.
  2799.  
  2800.  
  2801. ?Multiply
  2802.  
  2803.  The Multiply command allows you to multiply all of the output values of an
  2804.  FFT by some constant non-zero number for scaling purposes.  (This only
  2805.  affects the amplitude or power values, not the frequency values.)  If no
  2806.  argument is specified, the previous multiplication factor is canceled.
  2807.  
  2808.  
  2809. ?NoWarranty
  2810.  
  2811.  The NoWarranty command displays the nowarranty disclaimer of GFFT,
  2812.  excerpted from the General Public License.
  2813.  
  2814.  
  2815. ?Numerical
  2816. ?NoNumerical
  2817.  
  2818.  The Numerical command replaces the new FFT routines written originally for
  2819.  GFFT with routines from the book 'Numerical Recipes In C,' by Press,
  2820.  Flannery, Teukolsky, and Vetterling (Cambridge University Press: 1988).
  2821.  The NoNumerical restores the original GFFT routines.
  2822.  
  2823.  You will probably find only very small differences between using the
  2824.  GFFT FFT routines and the Numerical ones, though there are significant
  2825.  differences in how they have been implemented.  But this command enables
  2826.  you to compare for yourself (as it has for me).  Note that it only
  2827.  replaces the code performing the FFT itself, not the segment averaging and
  2828.  output processing.
  2829.  
  2830.  GFFT is not distributed with the source code for the 'Numerical' FFT
  2831.  routines, nor is this code linked into the distributed binary image,
  2832.  because the Numerical routines have a copyright which does not permit
  2833.  this.  To enable this command, you must acquire the code by either by
  2834.  buying the book and entering the source code yourself, or by buying the
  2835.  source code diskette, and making an image with it included (uncomment the
  2836.  line(s) defining 'NUMERICAL_RECIPES_AVAILABLE' in the smakefile.  The
  2837.  functions needed are 'four1.c' and 'realft.c.'  Be sure NOT to distribute
  2838.  a binary image of GFFT with the numerical recipes code included, or to
  2839.  distribute the Numerical Recipes code in any other fashion without
  2840.  permission of its authors.
  2841.  
  2842.  
  2843. ?Octave
  2844.  
  2845.  The Octave command allows you to select a particular octave within a file
  2846.  whose format permits more than one octave (e.g. 8SVX).  By default, the
  2847.  lowest octave is selected--this is present in all files.  You may return
  2848.  to the default by giving an octave command with no argument.  To specify
  2849.  another octave, use an argument which is a single digit between 0 and 7.
  2850.  1 specifies the lowest octave, and 7 specifies the highest one.  0 is a
  2851.  special case which specifies the highest octave available, regardless of
  2852.  how many octaves there are (it may also be the lowest).  If the octave
  2853.  specified is not available, this problem may not be detected until the OK
  2854.  command is given, but no analysis will be performed.
  2855.  
  2856.  Syntax:
  2857.  
  2858.      Octave [<number>]
  2859.  
  2860.  Examples:
  2861.  
  2862.      gfft>Octave 0
  2863.      gfft>Octave 1
  2864.  
  2865.  
  2866. ?OneShotOnly
  2867. ?NoOneShotOnly
  2868.  
  2869.  The OneShotOnly command causes GFFT to read only the one-shot portion of
  2870.  a sample in a format (e.g. 8SVX) supporting this feature.  By default,
  2871.  GFFT will read the combined one-shot and repeat portions of the file.
  2872.  The OneShotOnly command implicitly cancels the RepeatOnly command as they
  2873.  are mutually exclusive.  
  2874.  
  2875.  The NoOneShotOnly command cancels the OneShotOnly command and restores the
  2876.  default operation if OneShotOnly had been in effect.
  2877.  
  2878.  
  2879. ?Overlap
  2880. ?NoOverlap
  2881.  
  2882.  The Overlap command engages overlap mode (which is the default).  The
  2883.  NoOverlap command disengages overlap mode.
  2884.  
  2885.  Because it makes the best use of a limited amount of data, overlap mode is
  2886.  engaged by default.  It is also able to include all the data in the
  2887.  analysis, regardless of whether the number of frames is exactly 2n times a
  2888.  power of 2 (where n is a positive integer).  If you are more concerned
  2889.  with making the best use of processing time, and are not concerned about
  2890.  ignoring a trailing remainder of the data, you may wish to disengage
  2891.  overlap mode.
  2892.  
  2893.  In overlap mode, the windows applied to the data are overlapped.  By
  2894.  overlapping the windows (as compared with just laying them end-to-end to
  2895.  cover all frames present) better use is made of a fixed amount of data in
  2896.  reducing the variance of the computed spectrum.  This is true for all
  2897.  window shapes, but especially true for the non-rectangular ones.
  2898.  Overlapping may provide up to 9/11 of the variance reduction of having
  2899.  twice as much data to work with (see Press, et. al.).
  2900.  
  2901.  Normally, windows are overlapped by half their length (i.e., the fixed
  2902.  overlap percentage for flat FFT analysis is 50%).  However, in overlap
  2903.  mode, the overlap of the last window is decreased or increased to
  2904.  encompass the remainder of the data.
  2905.  
  2906.  Given real (i.e. non-complex) sample data, 2 data points (frames) are
  2907.  required for each Bin.  Thus, 1024 bins would require 2048 frames.  With
  2908.  50% overlap, two overlapping windows would fit exactly into 3072 (2048 x
  2909.  1.5) frames, three overlapping windows would fit exactly into 4096 (2048 x
  2910.  2) frames, and four overlapping windows would fit exactly into 5120 (2048
  2911.  x 2.5) frames.  But GFFT varies the overlap of the last window to fit
  2912.  whatever amount of additional data is present after the last whole window
  2913.  of data has been read.  So, two windows are used for any number of frames
  2914.  F such that 2048 < F < 4096, three windows are used for F = 4096, four
  2915.  windows are used for 4096 < F < 6144, and so on, with the overlap of the
  2916.  last window somewhere between 0 and 100% (non-inclusive).
  2917.  
  2918.  Though this scheme will ensure that all frames are included in at least
  2919.  one segment, it may result in either over-representation or
  2920.  under-representation of the last region of data.  This is a fairly minor
  2921.  detail (especially considering that the FFT is really only intended for
  2922.  'continuous' sounds...) but if you are concerned with such things you may
  2923.  want to specify exactly the number of frames to be used using the Frames
  2924.  or StartFrame commands available in the CLI interface, and make sure you
  2925.  have chosen an exact multiple (two or greater) of the bin size for an
  2926.  exact overlap fit.  For 3D-Time analysis, you should set the Time Segment
  2927.  Size instead (this is discussed further in the help for TimeSegSize).
  2928.  
  2929.  
  2930. ?Pad
  2931. ?NoPad
  2932.  
  2933.  The Pad command activates 'Pad' mode.  The NoPad command cancels Pad mode.
  2934.  Pad mode is not activated by default, and its use is strongly discouraged.
  2935.  
  2936.  In 'Pad' mode, the last (or only) partial segment of data will be padded
  2937.  with zeros prior to analysis.
  2938.  
  2939.  Though it may sound innocuous, zero padding can produce serious artifacts
  2940.  in a computed spectrum, and I strongly discourage it.  The default
  2941.  'Overlap' mode takes the best use of all the data without padding or
  2942.  truncation.  Even truncation, which might result if 'Overlap' is
  2943.  disengaged and the number of frames is not 2 times a power of 2, is
  2944.  superior to padding for most purposes.  The only advantage of padding is
  2945.  that it permits the use of a larger maximum number of bins than the other
  2946.  techniques in some cases, but be forewarned that many of those bins will
  2947.  be filled with garbage.
  2948.  
  2949.  See help for the Bins and Overlap commands for further discussion.
  2950.  
  2951.  
  2952. ?Parseval
  2953. ?NoParseval
  2954.  
  2955.  The Parseval command selects the Parseval normalization option.  The
  2956.  NoParseval command cancels the Parseval normalization option.  Parseval
  2957.  normalization is the default.  This may be slightly slower, but is more
  2958.  accurate.  By selecting the NoParseval option, you may get a performance
  2959.  improvement of about 2.5%, at the cost of a small error (I have seen
  2960.  0-20%) in the overall spectrum level.  The spectrum shape is unaffected.
  2961.  
  2962.  Using Parseval normalization, the accuracy of the output normalization
  2963.  (prior to PSDensity and/or Pink normalization, if also applied) is assured
  2964.  by applying Parseval's theorem.  According to Parseval's theorem, the sum
  2965.  of the squared sample values should equal the sum of the (squared
  2966.  amplitude) bin values.  Otherwise, estimators are used (based on the
  2967.  average window gain, etc.) which are fairly accurate.
  2968.  
  2969.  Parseval normalization is particularly significant if non-rectangular data
  2970.  windows are used, and is more significant for complex waveforms than
  2971.  simple ones.
  2972.  
  2973.  
  2974. ?Parzen
  2975.  
  2976.  The Parzen command selects windows of a particular shape.  These windows
  2977.  will be applied to the data in segments whose size is determined by the
  2978.  number of bins.  The Parzen command cancels the effect of any preceding
  2979.  window shape command.
  2980.  
  2981.  The Parzen window is based on the formula presented by Press, et al, in
  2982.  their book 'Numerical Recipes.'  It is not the same as the "Parzen
  2983.  Window" identified by Harris.  It is superior to the triangle and
  2984.  rectangle windows in sidelobe rejection.
  2985.  
  2986.  
  2987. ?Pink
  2988. ?NoPink
  2989.  
  2990.  * Warning!  The results of this command may not be entirely 'correct.' *
  2991.  
  2992.  The Pink command engages pink mode, in which a particular sort of
  2993.  frequency-dependent normalization is performed on the spectral output so
  2994.  that pink noise will be shown as having nearly 'flat' response.  The
  2995.  NoPink command cancels pink mode.
  2996.  
  2997.  (Pink noise is random noise shaped so that there is an equal amount of
  2998.  energy or amplitude in each octave or fractional-octave band.  It is
  2999.  frequently used in acoustic testing.)
  3000.  
  3001.  Pink mode simply weights each output value by a corrective factor; it does
  3002.  not do any grouping and/or averaging (so no resolution is lost).  The
  3003.  current formula does not seem entirely accurate at the lowest frequencies,
  3004.  where the results may vary depending on how many bins are being used.
  3005.  This makes it difficult (or impossible) to splice several curves of pink
  3006.  noise with different numbers of bins together.  In any case, the sum of
  3007.  the squared output values will no longer reflect the sum of the squared
  3008.  input values, in fact, the scale may be offset considerably.  You may
  3009.  use the 'Multiply' command to rescale the results conveniently.
  3010.  
  3011.  (You may also wish to do Smoothing with LogX set when plotting pink noise,
  3012.  and use extremely large sample files with 1,000,000 frames or more to
  3013.  allow for the randomness in pink noise to average out.)
  3014.  
  3015.  
  3016. ?Plot
  3017. ?NoPlot
  3018.  
  3019.  The Plot command selects Plot mode.  The NoPlot command cancels Plot mode.
  3020.  Plot mode is the default for Workbench and CLI-Interactive modes; it is
  3021.  not the default for CLI-batch mode.
  3022.  
  3023.  In Plot mode, GNUPLOT is automatically invoked in a background process to
  3024.  display the result of any spectrum analysis performed.  If no spectrum
  3025.  file has been explicitly specified, GFFT will create a temporary spectrum
  3026.  file to use to send data to GNUPLOT.  All such temporary files created by
  3027.  GFFT will be deleted on exit from GFFT (if the plot display was canceled).
  3028.  
  3029.  If plot mode is disengaged, a named output file must be explicitly
  3030.  specified with the Write command--otherwise the analysis would simply
  3031.  create and then delete a temporary file, which would be pointless.  It is
  3032.  not possible to plot data written to 'con:' (see help for the Write
  3033.  command for further details on con:) so if con: is chosen as the write
  3034.  file, Plot mode is invalid.
  3035.  
  3036.  
  3037. ?PlotOutput
  3038.  
  3039.  The PlotOutput command lets you set the output device or filename for
  3040.  GNUPLOT.  By default, plots are displayed on an amiga screen, and no
  3041.  PlotOutput command is required.  However, if the Terminal command is used
  3042.  to produce a plot on an external plotter or printer or to a Postscript or
  3043.  TeX file, the PlotOutput command may be required.  (The argument to the
  3044.  PlotOutput command will become an argument used in an Output command to
  3045.  GNUPLOT.)
  3046.  
  3047.  Syntax:
  3048.  
  3049.      plotoutput <device or filename: char *>
  3050.      plotoutput '<device or filename: char *>'
  3051.      plotoutput "<device or filename: char *>"
  3052.      plotoutput ''
  3053.      plotoutput ""
  3054.      plotoutput
  3055.  
  3056.  If the terminal command is given without any arguments, or if the argument
  3057.  is a null string enclosed in "" or '', GNUPLOT will use the default
  3058.  output (i.e. it will plot to an Amiga screen).
  3059.  
  3060.  Examples:
  3061.  
  3062.      plotoutput ser:
  3063.      plotoutput par:
  3064.      plotoutput Plot1.PS
  3065.  
  3066.  Note: Because GNUPLOT already formats the output for the particular
  3067.  printer you have, use of the serial device (ser:) or parallel device
  3068.  (par:), whichever your printer is actually attached to, is more
  3069.  appropriate than the use of the printer device (prt:).  GNUPLOT supports
  3070.  many different printers and plotters, but does not support the Amiga
  3071.  Intuition printer drivers.
  3072.  
  3073.  Example:
  3074.  
  3075.      terminal hp500c
  3076.      plotoutput par:
  3077.  
  3078.  
  3079. ?PSDensity
  3080. ?NoPSDensity
  3081.  
  3082.  The PSDensity command activates an output normalization in which each FFT
  3083.  value is divided by the width of the bins used in Hz.  The NoPSDensity
  3084.  command restores the default (total amplitude/power) normalization.
  3085.  
  3086.  By default, GFFT will output values which are normalized to show the total
  3087.  amplitude or power (squared amplitude) present in each frequency range
  3088.  centered on that bin's nominal frequency, as well as can be determined by
  3089.  the FFT technique (which depends on the window shape used, the number of
  3090.  segments which can be averaged, and other parameters, but does not feature
  3091.  an extremely sharp cut-off from one bin to the next as compared with some
  3092.  esoteric spectrum analysis techniques).
  3093.  
  3094.  For some applications, it is preferable to have a 'density' normalization,
  3095.  for which bin values are normalized by the bin width.  This will permit
  3096.  several FFT's of a random noise source using different numbers of bins to
  3097.  be directly compared with one another or spliced together, even though the
  3098.  wider bins (which result from using a smaller number of bins) will
  3099.  naturally capture more amplitude or power.  The Multiply command can then
  3100.  be used to scale each FFT as required.
  3101.  
  3102.  
  3103. ?Quantization
  3104. ?NoQuantization
  3105.  
  3106.  The Quantization command lets you set a quantization value for GFFT
  3107.  output.  For example, a quantization of 0.1 will cause all amplitude or
  3108.  power values to be rounded off to the nearest 0.1.  The quantization value
  3109.  in effect can be canceled with the NoQuantization command, or by giving
  3110.  the Quantization command with no argument.
  3111.  
  3112.  Syntax:
  3113.  
  3114.  Quantization [<quantization value: double>]
  3115.  NoQuantization
  3116.  
  3117.  Note that you could use any arbitrary value for quantization (e.g.
  3118.  12.3456) though this might not be very useful.  Typical values might be
  3119.  0.1, 0.05, 0.001, etc.
  3120.  
  3121.  This has no effect on the FFT computation itself, and does not affect the
  3122.  output of frequency values.
  3123.  
  3124.  [Unfortunately, quantization may cause 'quantum jumps' to occur back and
  3125.  forth as a spectrum nears each quantum threshold.  Thus, the quantization
  3126.  feature is not quite as useful as originally intended.  What needs to be
  3127.  done here, I think, is to apply quantization BEFORE smoothing, though the
  3128.  result would then not be quantized as such.  If you have any useful ideas
  3129.  here, please let me know.  Meanwhile, consider the use of explicit HighY
  3130.  and LowY values to make small Y variations appear less pronounced.]
  3131.  
  3132.  
  3133. ?Rate
  3134.  
  3135.  The Rate command allows you to enter the sampling rate for an unformatted
  3136.  file.  You must enter a rate for an unformatted file before giving the OK
  3137.  command or no analysis will be performed.  One you enter a rate, it
  3138.  remains in effect for all further unformatted files until you select a new
  3139.  rate or select a formatted file.  The rate command expects one numeric
  3140.  argument which may be in either integer or floating point format.  The
  3141.  rate must be greater than zero.
  3142.  
  3143.  Syntax:
  3144.  
  3145.      Rate [<sampling rate: number>]
  3146.  
  3147.      gfft>rate 10000
  3148.      gfft>rate 1.119e6
  3149.  
  3150.  You may also override the rate indicated by a formatted file with the rate
  3151.  command.  (For example, you may wish to change the units from seconds to
  3152.  microseconds.)  To override the rate for a formatted file, you must give
  3153.  the rate AFTER giving the Read command for the file. (When you give the
  3154.  Read command the formatted information is read and it supercedes any Rate
  3155.  command previously in effect.)  You may return to the default rate
  3156.  indicated by the file itself by giving a rate command with no argument.
  3157.  
  3158.  
  3159. ?Read
  3160.  
  3161.  The Read command selects a sample file for GFFT to read, or cancels
  3162.  reading from the sample file currently in effect if no argument is given.
  3163.  Once a sample file is selected, it remains in effect for one or more
  3164.  analyses until another sample file is selected.
  3165.  
  3166.  The argument following Read may be a complete file pathname or a relative
  3167.  file pathname (relative to the current directory when GFFT was started).
  3168.  If the filename contains spaces, you must enclose it in either apostrophes
  3169.  (') or quotation marks (").
  3170.  
  3171.  Syntax:
  3172.  
  3173.      Read [<filename: string>]
  3174.      Read '<filename: string>'
  3175.      Read "<filename: string>"
  3176.  
  3177.  Example:
  3178.  
  3179.      gfft> read sample1
  3180.      gfft> rate 10000
  3181.      gfft> bins 1024
  3182.      gfft> ok
  3183.      gfft> smoothing 100
  3184.      gfft> ok
  3185.      gfft> read "ram disk:samples/my old piano"
  3186.      gfft> ok
  3187.      gfft> read /old/sample1
  3188.      gfft> ok
  3189.  
  3190.  GFFT can read both formatted and unformatted files.  If GFFT understands
  3191.  the format of the file (it currently understands IFF 8SVX, AIFF, and AVR
  3192.  formats), it will automatically set the sampling rate.  If the file is
  3193.  unformatted, you will have to set the sampling rate manually before
  3194.  beginning an analysis.  You may also have to use the Bits and Unsigned
  3195.  commands if your unformatted file uses does not use the default for
  3196.  unformatted files (8 bits, signed).
  3197.  
  3198.  If the file is formatted using an unrecognized format, you may still be
  3199.  able to read it using the CLI command 'StartByte' (which allows you to
  3200.  skip over the file header) if you know how long the file header is, and
  3201.  'Frames' (which allows you to read a specified number of frames, skipping
  3202.  any file segments following the sample data).  This is not recommended
  3203.  unless you are very familiar with the inner workings of the file format
  3204.  you are working with.  (GFFT recognizes but does not yet understand RIFF
  3205.  and VOCH formats.  See help for the IgnoreFormat command for further
  3206.  advice on how to deal with those formats.)
  3207.  
  3208.  A sample file must be selected before you can perform an analysis.
  3209.  However, you may specify 'con:' as the sample file.  This will cause GFFT
  3210.  to prompt you to enter each data point from the keyboard after the OK
  3211.  command is given.  You may then enter each point as a floating point or
  3212.  integer number.  Note that for con: you must also enter the sampling rate
  3213.  before giving the OK command, since con: has no 'formatted' information.
  3214.  This may be useful if you have a small number of manually recorded data
  3215.  points, or wish to experiment with FFT spectrum analysis to gain a deeper
  3216.  understanding of it.  For example, if you entered the following:
  3217.  
  3218.  
  3219.      gfft> read con:
  3220.      gfft> rate 10000
  3221.      gfft> ok
  3222.  
  3223.      Enter <value> (float OK) or <newline> to end input [0]: 1
  3224.      Enter <value> (float OK) or <newline> to end input [0]: 0
  3225.      Enter <value> (float OK) or <newline> to end input [0]: -1.0e0
  3226.      Enter <value> (float OK) or <newline> to end input [0]: 0
  3227.      Enter <value> (float OK) or <newline> to end input [0]:
  3228.  
  3229.  You would get a spectrum of 2 points (Nyquist Frequency/2, Nyquist
  3230.  Frequency) with amplitude 0.707... at the first frequency and amplitude 0
  3231.  at the second frequency.  This illustrates the default normalization of
  3232.  GFFT, since 0.707... is also the RMS amplitude of the signal you have
  3233.  entered, and it has a frequency of half of the Nyquist frequency.
  3234.  
  3235.  Once con: has been specified as the sample file, it remains in effect
  3236.  until another Read command is given.  However, the con: data is stored
  3237.  internally so you do not have to re-enter it for each analysis.  If you
  3238.  wish to read new data from con:, you may give the 'Read con:' command
  3239.  again.
  3240.  
  3241.  con: must be specified in lower case.
  3242.  
  3243.  
  3244. ?Rectangle
  3245.  
  3246.  The Rectangle command selects windows of rectangular shape.  These windows
  3247.  will be applied to the data in segments whose size is determined by the
  3248.  number of bins.  The Rectangle command cancels the previously selected
  3249.  window shape.
  3250.  
  3251.  The 'Rectangle' window is the simplest window (effectively a series of
  3252.  1's) and the fastest to compute and apply (i.e. no computation or
  3253.  application is necessary).  It also results in the sharpest initial
  3254.  fall-off on either side of a spectral peak.  However, it is the most
  3255.  susceptible to the presence of side-lobe artifacts.  If you wish to remove
  3256.  the influence of side-lobes, use a different window shape, such as
  3257.  '74dbBlackmanHarris.'
  3258.  
  3259.  Rectangle is currently the default window shape.
  3260.  
  3261.  
  3262. ?ReOutput
  3263.  
  3264.  The ReOutput command allows you to rewrite the results of the preceding
  3265.  analysis subject to a number of changed parameters.  The FFT analysis
  3266.  itself will not be repeated, only the output processing (and plotting
  3267.  phase--if Plot is selected).  This is useful for making minor changes
  3268.  after a long analysis without repeating the analysis itself.
  3269.  
  3270.  Here are the parameters which may be changed before a ReOutput:
  3271.  
  3272.      Spectrum File  ('Write,' 'Open,' or 'Append' commands)
  3273.      Plot (or NoPlot)
  3274.      Smoothing Segments and Squared Smoothing
  3275.      High Frequency
  3276.      Low Frequency
  3277.      Mean
  3278.      Power
  3279.      Amplitude
  3280.      dB
  3281.      LogX
  3282.      LogY
  3283.      Multiply
  3284.      Sampling Rate
  3285.      Pink
  3286.      Parseval
  3287.      Quantization
  3288.      LowY
  3289.      HighY
  3290.      
  3291.  Here are just a few parameters WHICH SHOULD NOT BE CHANGED between OK and
  3292.  ReOutput:
  3293.  
  3294.      Sample File (Read command)
  3295.      Bins
  3296.      Overlap
  3297.      Pad
  3298.      Window Shape  (Rectangle, 74dB, etc.)
  3299.      Any 3d parameters...in fact, ReOutput is not at all possible with 3d...
  3300.                           see help for the RePlot command.
  3301.  
  3302.  Warning!  Currently, if you change these parameters and ReOut, you will
  3303.  not get any sort of warning that the changed values have no effect.
  3304.         
  3305.  There is also a RePlot command, with different capabilities (generally
  3306.  more limited) which skips the output stage (but allows change of 3d
  3307.  parameters).
  3308.  
  3309.  
  3310. ?RepeatOnly
  3311. ?NoRepeatOnly
  3312.  
  3313.  The RepeatOnly command causes GFFT to read only the repeat portion of a
  3314.  sample in a format (e.g. 8SVX) which supports this feature.  By default,
  3315.  GFFT will read the combined one-shot and repeat portions of the file.  The
  3316.  RepeatOnly command implicitly cancels the OneShotOnly command as they are
  3317.  mutually exclusive.  The NoRepeatOnly command cancels the RepeatOnly
  3318.  command and restores the default operation if RepeatOnly had been in
  3319.  effect.
  3320.  
  3321.  
  3322. ?RePlot
  3323.  
  3324.  The RePlot command allows you to plot the previous analysis with a few
  3325.  changed parameters.  The analysis itself, including the output phase, will
  3326.  not be repeated.  Instead, GNUPLOT will be re-invoked with with new
  3327.  parameters.
  3328.  
  3329.  Here are the parameters which may be changed between OK and RePlot:
  3330.  
  3331.         Plot (if previously off)
  3332.         LogX (with no smoothing!  LogX smoothing requires output phase)
  3333.         LogY
  3334.         RotX
  3335.         RotZ
  3336.         LowFrequency (*see note below)
  3337.         HighFrequency (*see note below)
  3338.  
  3339.  Warning!  Currently, if you change other parameters and RePlot, you will
  3340.  not get any sort of warning that the changed values have no effect.
  3341.  
  3342.  Note that the ReOutput command permits the modification of many more
  3343.  parameters than RePlot, though it might take slightly longer, and it does
  3344.  not permit the repetition of a 3D analysis.  (ReOutput will also produce a
  3345.  plot if Plot mode is activated.)
  3346.  
  3347.  RePlot may also be used in conjunction with the Open command to RePlot
  3348.  previously stored spectral data files.  See help for the Open command
  3349.  for further details.
  3350.  
  3351.  *Note that RePlot does not effect the LowFrequency and HighFrequency in
  3352.  exactly the same way as OK or ReOutput.  OK and ReOutput 'filter' the data
  3353.  written to the output data file so that no data outside the range
  3354.  established by LowFrequency and HighFrequency is written.  RePlot cannot
  3355.  filter the data which has already been written, but instead sends an
  3356.  explicit 'set xrange' command to GNUPLOT.  OK and ReOutput simply let
  3357.  GNUPLOT do autoranging for the x coordinate.  If you wanted a plot with
  3358.  artificially large left and right 'margins,' you could first do OK (with
  3359.  the desired actual data range set or defaulted), then do a RePlot with
  3360.  LowFrequency and HighFrequency values set outside the range of actual data
  3361.  to the point(s) where you would like the margins to be.  Thus, this
  3362.  difference in the way LowFrequency and HighFrequency are used in RePlot
  3363.  mode is actually a 'feature.'
  3364.  
  3365.  
  3366. ?RotX
  3367.  
  3368.  The RotX command changes the X Rotation factor used by GNUPLOT in
  3369.  rendering a three-dimensional plot (as would be produced using the Time3D
  3370.  command(s).)  Giving RotX without any arguments restores the default
  3371.  value, which is 60 degrees.
  3372.  
  3373.  Syntax:
  3374.  
  3375.      RotX [<x rotation: degrees 0-180>]
  3376.  
  3377.  Example:
  3378.  
  3379.      gfft>RotX 10
  3380.  
  3381.  
  3382. ?RotZ
  3383.  
  3384.  The RotZ command changes the Z Rotation factor used by GNUPLOT in
  3385.  rendering a three-dimensional plot (as would be produced using the Time3D
  3386.  command(s).)  Giving RotZ without any arguments restores the default
  3387.  value, which is 30 degrees.
  3388.  
  3389.  Syntax:
  3390.  
  3391.      RotZ [<x rotation: degrees 0-360>]
  3392.  
  3393.  Example:
  3394.  
  3395.      gfft>RotZ 90
  3396.  
  3397.  
  3398. ?Set
  3399.  
  3400.  Most commands in GFFT are 'set' commands, i.e., they adjust some particular
  3401.  setting which takes effect later when the OK command is given.  It is not
  3402.  necessary to preface these command with the verb 'Set,' as it is implied.
  3403.  
  3404.  However, for those whose fingers have been trained (by GNUPLOT and/or
  3405.  other programs) to type SET without thinking, an explicit SET command is
  3406.  also provided in GFFT.  It is essentially a dummy command, or, more
  3407.  precisely, it simply executes its arguments as if they are a complete
  3408.  command string in themselves.
  3409.  
  3410.  For example, the two following commands are equivalent:
  3411.  
  3412.      set logx
  3413.      logx
  3414.  
  3415.  Set does not discriminate between commands that are parameter setting
  3416.  commands and those that are not.  So, you could type 'set ok' which would
  3417.  perform the OK command.
  3418.  
  3419.  
  3420. ?SaveMemory
  3421. ?NoSaveMemory
  3422.  
  3423.  The SaveMemory option indicates to GFFT that you need to save memory
  3424.  space, possibly at the expense of processing time.  The NoSaveMemory
  3425.  command cancels this.  By default, GFFT will use extra memory if it can be
  3426.  used to save estimated processing time, even if the effect on processing
  3427.  time is fairly small.
  3428.  
  3429.  Currently, the only effect this has in on whether the trigonometric values
  3430.  used in the primary FFT function are saved for re-use.  By default, these
  3431.  values are saved, so if more than one segment is processed, they will not
  3432.  have to be recomputed.  This saves time at the expense of a considerable
  3433.  amount of memory (which increases as the number of bins increases).  If
  3434.  you are using a very large number of bins with a limited amount of memory,
  3435.  you may need the SaveMemory option.  I have found that even with a large
  3436.  number of segments, the effect of saving these trigonometric values is
  3437.  fairly small, about 6% on overall performance at most.  With some cached
  3438.  processors having very high internal floating point throughput (e.g.
  3439.  68040), the 'savememory' option might actually result in increased
  3440.  performance under some unusual circumstances, though the difference is
  3441.  likely to be quite small.
  3442.  
  3443. ?SaveSettings
  3444. ?SaveParameters
  3445.  
  3446.  The SaveSettings and SaveParameters commands save the current non-default
  3447.  settings to the named file.  The filename is required as an argument.
  3448.  An existing file with the same name will be backed up once.
  3449.  
  3450.  Syntax:
  3451.  
  3452.  SaveSettings <filename>
  3453.  SaveParameters <filename>
  3454.  
  3455.  SaveSettings will save the name of the current input and output files
  3456.  to the settings file, while SaveParameters will not.
  3457.  
  3458.  A settings or parameters file can be loaded with the 'LoadSettings'
  3459.  command.  If renamed to ".gfft," and placed in the S: directory or in
  3460.  the directory from which GFFT is executed, it will be loaded automatically
  3461.  at startup.
  3462.  
  3463.  Action commands such as OK, ReOutput, RePlot, Workbench, or SaveSettings
  3464.  will not be written to a settings file.  However, such commands can be
  3465.  added to the settings file after it has been written with a text editor.
  3466.  
  3467. ?ShowSettings
  3468.  
  3469.  The ShowSettings command displays some of the settings (such as input
  3470.  filename, output filename, number of bins, sampling rate, and window
  3471.  shape) which are currently in effect.
  3472.  
  3473. ?Signed
  3474. ?Unsigned
  3475.  
  3476.  The Signed command specifies that the input data file will have samples in
  3477.  'signed' format.  The UnSigned command will specify that the input data
  3478.  file will have samples in 'unsigned' format.  These commands are not
  3479.  necessary for formatted files, as the property is determined by the file
  3480.  type and/or header.  However, if you give the Signed or Unsigned command
  3481.  after the Read command, the Signed or Unsigned command will override the
  3482.  file type and/or header.
  3483.  
  3484.  Signed is the default and most usual type.
  3485.  
  3486.  
  3487. ?SmoothingSegments
  3488.  
  3489.  Using the SmoothingSegments command, you can specify that the output be
  3490.  'smoothed' or averaged over a certain number of segments.  (This works
  3491.  best if the number of segments is much smaller than the number of bins
  3492.  used).  The argument to SmoothingSegments is the number of segments to
  3493.  span the range from the lowest non-zero frequency to the Nyquist
  3494.  frequency.  If the SmoothingSegments command is given without any
  3495.  arguments, smoothing is canceled.
  3496.  
  3497.  Syntax:
  3498.  
  3499.      SmoothingSegments [<segments: integer>]
  3500.  
  3501.  Example:
  3502.  
  3503.      gfft> smooth 200
  3504.  
  3505.  If you plot with a large number of bins, or with LogX on, you may find
  3506.  that the left or right side of the plot line 'blooms' vertically with a
  3507.  wide range of values.  Rather than 'pixel averaging,' GNUPLOT shows the
  3508.  effect of plotting a line to each and every data point (even if many such
  3509.  points occur within one vertical line of pixels).  SmoothingSegments can
  3510.  be used to eliminate this 'blooming' effect, simulate 'pixel averaging,'
  3511.  and give you a more easily interpretable curve (though some important
  3512.  actual detail may be lost).
  3513.  
  3514.  If LogX is enabled, the mesh applied to the output will be logarithmically
  3515.  scaled.  The combination of using LogX, SmoothingSegments, and a extra
  3516.  large number of Bins is especially recommended for random noise analysis
  3517.  and/or whenever LogX is used.
  3518.  
  3519.  The smoothing technique is very simple.  A mesh of smoothing segments is
  3520.  laid on top of the FFT bins, and for each smoothing segment containing
  3521.  one or more bins, the average Y (amplitude) and X (frequency) values are
  3522.  computed, and these become the X and Y values that are written to the
  3523.  output file.  If there is only one data point within a smoothing segment,
  3524.  it is unchanged by this procedure.  If there is no data point within a
  3525.  smoothing segment, no data point will be output.  (Because of this, if LogX
  3526.  is enabled, it is very possible that there will not be as many data points
  3527.  as the number of segments you have chosen.  For example, given 4096 bins
  3528.  and 400 smoothing segments, only about 225 points will actually be
  3529.  produced because the actual data points in the beginning are farther apart
  3530.  than the smoothing segments.)
  3531.  
  3532.  If SquaredSmoothing selected, the averaging of the Y values is done by
  3533.  taking the positive root of average of the sum of the squared Y values.
  3534.  
  3535.  I am aware of much more sophisticated smoothing or 'convoluting'
  3536.  procedures which may have greater theoretic validity (e.g., see S. P.
  3537.  Lipschitz, T. C. Scott, and J. Vanderkooy, 'Increasing the Audio
  3538.  Measurement Capability of Analyzers by Microcomputer Postprocessing,'
  3539.  Journal of the Audio Engineering Society, Volume 33, Number 9, September
  3540.  1985...their technique simulates 1/3 octave bandwidth digital filters
  3541.  which is useful in that it supposedly approximates human auditory
  3542.  limitations), but these are also much more complicated.  The present
  3543.  technique is workable and useful, though it may be somewhat lacking in
  3544.  theoretic validity (though it is not entirely without precedent), and the
  3545.  results should be interpreted with some caution (you are probably not
  3546.  seeing all the real features that are there--but then that is true with
  3547.  any technique).
  3548.  
  3549.  
  3550. ?SquaredSmoothing
  3551. ?NoSquaredSmoothing
  3552.  
  3553.  The SquaredSmoothing command changes the operation of SmoothingSegments
  3554.  (see) slightly.  It has no effect if SmoothingSegments are not being used.
  3555.  The NoSquaredSmoothing cancels SquaredSmoothing.
  3556.  
  3557.  With SquaredSmoothing selected, the averaging of the Y values is done by
  3558.  taking the positive root of the average of the sum of the squared Y
  3559.  values.
  3560.  
  3561.  I have found this to make a nearly negligible difference in practice, but
  3562.  your experience may vary.
  3563.  
  3564.  
  3565. ?StartByte
  3566.  
  3567.  The StartByte command allows you to set a byte offset into a file at which
  3568.  GFFT will start reading samples.  StartByte should only be used with
  3569.  unformatted files, those whose format is not recognized by GFFT, or whose
  3570.  format is being ignored with the IgnoreFormat command, and only by those
  3571.  who understand the file format.  If the StartByte command is given without
  3572.  an argument, the StartByte feature is canceled.
  3573.  
  3574.  See also the StartFrame command, which is intended for more general usage.
  3575.  
  3576.  
  3577. ?StartFrame
  3578.  
  3579.  The StartFrame command allows you to set an offset into the sampled data
  3580.  at which GFFT will begin reading.  This is intended for use with formatted
  3581.  files which GFFT understands or unformatted files.  Use this command if
  3582.  you wish to ignore an early portion of the data.
  3583.  
  3584.  Syntax:
  3585.  
  3586.      StartFrame [<frame number: non-negative integer>]
  3587.  
  3588.  If Time3D processing is being performed, the StartFrame will apply to the
  3589.  data as a whole, and not to each Time3D segment.
  3590.  
  3591.  
  3592. ?Terminal
  3593.  
  3594.  The terminal command allows you to set the terminal type to be used by
  3595.  Gnuplot.  Ordinarily, GNUPLOT will default to using the 'amiga' terminal.
  3596.  Thus, your plot will be displayed on an amiga screen.  Using the
  3597.  'terminal' command, you can set it to use a printer, plotter, or anything
  3598.  else supported by GNUPLOT.  
  3599.  
  3600.  Syntax:
  3601.  
  3602.      terminal
  3603.      terminal <terminal name: name>
  3604.      terminal '<terminal specification: character string>'
  3605.      terminal "<terminal specification: character string>"
  3606.      terminal ""
  3607.      terminal ''
  3608.  
  3609.  If the terminal command is given without any arguments, or if the argument
  3610.  is a null string enclosed in "" or '', GNUPLOT will use the default
  3611.  terminal type.  If the argument given to the terminal command consists of
  3612.  more than one word separated by spaces, it should be enclosed in "" or ''
  3613.  (whichever is not used in the actual string).
  3614.  
  3615.  Examples:
  3616.  
  3617.      terminal amiga
  3618.      terminal hp500c
  3619.      terminal dumb
  3620.      terminal 'postscript landscape color "Courier" 14'
  3621.      terminal
  3622.  
  3623.  Note that if you specify a printer terminal, you should also use the
  3624.  PlotOutput command to specify the output device (ser: or par:, NOT prt:)
  3625.  or filename.
  3626.  
  3627.  For further information about the many GNUPLOT terminal types, refer to
  3628.  the GNUPLOT documentation.
  3629.  
  3630.  Note: the version of GNUPLOT supplied with WinGnuPlot defaults to using a
  3631.  terminal 'amigawindow' which requires MUI.  For use with GFFT, this
  3632.  must be changed to terminal 'amigascreen,' which is done by renaming the
  3633.  file .gfft-WinGnuPlot to .gfft as discussed in the INSTALLATION file.
  3634.  
  3635.  
  3636. ?Time3D
  3637. ?NoTime3D
  3638. ?TimeOffset
  3639. ?TimeOverlap
  3640. ?TimeSegments
  3641. ?TimeSegSize
  3642.  
  3643.  Syntax:
  3644.  
  3645.      Time3D
  3646.      NoTime3D
  3647.      TimeOffset [<Time Offset: integer>]
  3648.      TimeOverlap [<Time Overlap: floating point number>]
  3649.      TimeSegments [<Time Segment Count: integer>]
  3650.      TimeSegSize [<Time Segment Size: integer>]
  3651.  
  3652.  The '3D-Time' facilities of GFFT are intended to enable you to show how a
  3653.  spectrum varies with time.  GFFT is very flexible in how it enables you to
  3654.  do this.  The results can also be plotted in 3 dimensions by GNUPLOT where
  3655.  Z is the axis of time.
  3656.  
  3657.  The basic model is as follows: The sample frames are divided into segments
  3658.  called 'Time Segments,' and a spectrum analysis is performed on each Time
  3659.  Segment.  Time Segments can be overlapped, and the overlap can either be
  3660.  specified as a fraction of the size of each Time Segment ('Time Segment
  3661.  Overlap') or as the number of frames by which each Time Segment is ahead
  3662.  of the previous one ('Time Segment Offset').  By default, the Time Segment
  3663.  Overlap is set to 0.5 (i.e. 50%) and the 'Time Segment Offset' is computed
  3664.  automatically.  Then, either the number of time segments can be specified
  3665.  (this is the 'Time Segment Count') or, their size can be specified (this
  3666.  is the 'Time Segment Size') whichever is more convenient or useful to your
  3667.  application.
  3668.  
  3669.  One of the two parameters Time Segment Count and Time Segment Size must be
  3670.  set.  When either of these two parameters is set, any previous value of
  3671.  the other one will then be determined automatically.
  3672.  
  3673.  Time Segment Overlap has a default value of 0.5.  If Time Segment Offset
  3674.  is set, it supercedes Time Segment Overlap.
  3675.  
  3676.  If you set any of the above 3D-Time parameters, Time3D mode is activated
  3677.  automatically.  You may deactivate it by giving the NoTime3D command, and
  3678.  subsequently reactivate it by giving the Time3D command.
  3679.  
  3680.  You may also adjust the X Rotation and Z Rotation factors used by GNUPLOT
  3681.  in rendering the 3-d plot using the RotX and RotZ commands.
  3682.  
  3683.  Note that Time Segments are distinct from the FFT 'segments' used in a
  3684.  flat spectral analysis--and in the FFT analysis within each Time Segment.
  3685.  If each Time Segment is large enough relative to the number of Bins, there
  3686.  may be more than one FFT segment within each Time Segment, the results of
  3687.  which are averaged to reduce the variance.  Within each Time Segment, the
  3688.  usual 'Bins,' 'Overlap,' 'Pad,' and window shape parameters still apply,
  3689.  so the full flexibility of a flat GFFT is available (though the maximum
  3690.  number of bins possible may be reduced).  Only one parameter available to
  3691.  a flat analysis is unavailable for analysis within each Time
  3692.  Segment--StartFrame.  StartFrame will apply to the input file as a whole
  3693.  and not to each Time Segment.
  3694.  
  3695.  In cases where 3D-Time analysis reduces the number of bins possible, the
  3696.  use of high performance window shapes such as Hann or 74dB Blackman-Harris
  3697.  is recommended.
  3698.  
  3699.  
  3700.  Examples:
  3701.  
  3702.  1.  Suppose you just want a rough idea as to how the spectrum in a fairly
  3703.  small sample file (such as an instrument) varies over time, and are
  3704.  willing to use the default Time Segment Overlap (50%), and would simply
  3705.  like each segment to use the maximum Bins size possible (with overlap, if
  3706.  possible).  You might figure 5 time segments would be adequate to get a
  3707.  rough idea, yet would not be too many considering the number of frames.
  3708.  (If you have a very small sample file, you might have to use only 2 or 3
  3709.  Time Segments.  Increasing the number of Time Segments will reduce the
  3710.  maximum possible number of bins, so there is a trade-off here which is
  3711.  critical for small sample files.)
  3712.  
  3713.      gfft>read piano.iff
  3714.      gfft>TimeSegments 5
  3715.      gfft>74dB-Blackman-Harris
  3716.      gfft>OK
  3717.  
  3718.  If the Bins value had previously been set to a specific value, or if a
  3719.  NoOverlap command had previously been given, you would also include one of
  3720.  the following commands prior to OK:
  3721.  
  3722.      gfft>Bins
  3723.      gfft>Overlap
  3724.  
  3725.  2.  Suppose you wish to divide the sample file into non-overlapping time
  3726.  segments which could each be analyzed with 1024 bins (with no overlap or
  3727.  padding within each time segment).
  3728.  
  3729.  First set the Time Segment Size parameter to 2048, then set the Time
  3730.  Overlap parameter to 0.  (For non-complex data, there must be 2 sample
  3731.  frames for each FFT bin.)  You may either specify 1024 bins or use the
  3732.  maximum (default) setting, which is re-established by giving a Bins
  3733.  command with no argument.  Since exactly 2048 frames are available in each
  3734.  Time Segment, and this corresponds exactly to what would be required for
  3735.  1024 bins, no overlap will be used within each Time Segment regardless of
  3736.  whether the Overlap mode is engaged, so it is not necessary to give the
  3737.  NoOverlap command in this case.
  3738.  
  3739.      gfft>Read manysamples.aiff
  3740.      gfft>TimeSegSize 2048
  3741.      gfft>TimeOverlap 0
  3742.      gfft>Bins
  3743.      gfft>OK
  3744.  
  3745.  3. Suppose you wish to have each Time Segment to be ahead of the previous
  3746.  one by exactly 1000 frames.  (This might apply if you want the z axis to
  3747.  have increments of 0.1 second, and the sampling rate was 10,000.)  You
  3748.  consider some Time Segment overlap of approximately 0.5 to be acceptable,
  3749.  but you would like an analysis with 1024 bins.
  3750.  
  3751.      gfft>Read myrate10000
  3752.      gfft>TimeSegSize 2048
  3753.      gfft>TimeOffset 10000
  3754.      gfft>OK
  3755.  
  3756.  
  3757.  4.  Suppose you have a VERY large sample file, and would rather not
  3758.  analyze the whole thing, but would like a 'spot' analysis every 100,000
  3759.  frames.  You would like to have 1024 bins used in each analysis, but would
  3760.  prefer to reduce the variance of each 'spot' spectrum by averaging 4
  3761.  overlapped segments within each time segment.
  3762.  
  3763.  Note that the overlap used for a flat spectral analysis and within each
  3764.  Time Segment is fixed at 0.5 and cannot be changed (though it can be
  3765.  turned off).  Therefore, 2 overlapping FFT segments would occupy 1.5x the
  3766.  space of one segment, 3 overlapping segments would occupy 2x, and 4
  3767.  overlapping segments would occupy 2.5x if exactly these numbers of frames
  3768.  are available.  
  3769.  
  3770.  So, to get 4 overlapped FFT segments within each Time Segment, we would
  3771.  specify the TimeSegSize to 2.5 x (1024 x 2) which is 5120.  In this case
  3772.  we would have to specify the Bins too, otherwise they would default to
  3773.  the maximum possible, 2048.
  3774.  
  3775.      gfft>Read hugefile.aiff
  3776.      gfft>TimeOffset 100000
  3777.      gfft>TimeSegSize 5120
  3778.      gfft>Bins 1024
  3779.      gfft>OK
  3780.  
  3781.  (Actually, 2 overlapping segments will be used for any number of frames
  3782.  greater than 1 segment but less than 2 segments, 3 overlapping segments
  3783.  will be used for exactly the number of frames in 2 segments, 4 overlapping
  3784.  segments will be used for any number of frames greater than 2 segments but
  3785.  less than 3 segments, and so on.)
  3786.  
  3787.  
  3788. ?Topaz
  3789.  
  3790.  The Topaz command forces the use of the font TOPAZ 8 in the GFFT Dialog
  3791.  Window and associated requesters.  It has no effect during CLI mode, nor
  3792.  on GNUPLOT rendering.  It must be specified before the Dialog Window is
  3793.  opened.  The easiest way to do this is to include it in a GFFT startup
  3794.  file or as a tooltype (see HELP INTRODUCTION).
  3795.  
  3796.  If, for some unforeseen reason, your system default font does not work well
  3797.  in the GFFT Dialog Box, you may force TOPAZ 8 to be used by giving the
  3798.  TOPAZ command (probably in your setup file or as a tooltype).
  3799.  
  3800.  GFFT will attempt to use your system default font (the monospaced one) in
  3801.  the Dialog Window if you have Amiga OS 2.0 or later.  If your screen is
  3802.  not large enough to display a 80x24 grid of characters, or if the Topaz
  3803.  command has been given, GFFT will use the TOPAZ 8 font which should
  3804.  provide a tolerable display on all systems.
  3805.  
  3806.  
  3807. ?Triangle
  3808.  
  3809.  The Triangle command selects windows of triangular shape.  These windows
  3810.  will be applied to the data in segments whose size is determined by the
  3811.  number of bins.  The Triangle command cancels the effect of any preceding
  3812.  window shape command.
  3813.  
  3814.  The 'Triangle' window is the next simplest window, after the Rectangle
  3815.  window.  Its shape is that of a triangle peaking in the center of each
  3816.  data segment.  The 'Triangle' window is often called the 'Bartlett'
  3817.  window, after a scientist who found it to be useful.
  3818.  
  3819.  The triangle window is superior to the rectangle window in side-lobe
  3820.  rejection.  In turn, it is inferior to all remaining window shapes in
  3821.  side-lobe rejection.
  3822.  
  3823.  
  3824. ?Welch
  3825.  
  3826.  The Welch button selects windows of particular shape.  These windows will
  3827.  be applied to the data in segments whose size is determined by the number
  3828.  of bins.  The Welch command cancels the effect of any preceding window
  3829.  shape command.
  3830.  
  3831.  The Welch window is based on the formula presented by Press, et al, in
  3832.  their book 'Numerical Recipes.'  It is superior to the triangle and
  3833.  rectangle windows in sidelobe rejection.
  3834.  
  3835.  
  3836. ?Workbench
  3837.  
  3838.  The Workbench command will open a 'GFFT Dialog Window' on the workbench
  3839.  (or the default public screen) to continue the current GFFT session.  If
  3840.  you have already selected file(s) and/or options, these will continue in
  3841.  effect and may be shown in the Dialog Window display.  From the GFFT
  3842.  Dialog Window, you may perform any operations ordinarily available in that
  3843.  display, the same as if you had clicked on the GFFT icon to begin with.
  3844.  
  3845.  While the GFFT Dialog Window is active, no more commands will be accepted
  3846.  from the console, but you may be prompted to enter data points from the
  3847.  console if 'con:' is specified as the sample file.
  3848.  
  3849.  To resume entering commands from the console, click the 'CLI' button on
  3850.  the lower left hand of the GFFT Dialog Window display.  At that point,
  3851.  the GFFT Dialog Window will be removed and GFFT will prompt for the
  3852.  next command.
  3853.  
  3854.  You may go back and forth between graphical and command modes as often as
  3855.  you wish.
  3856.  
  3857.  
  3858. ?Write
  3859.  
  3860.  The Write command enables you to explicitly name and save the file of
  3861.  spectral data written by GFFT (and read by GNUPLOT).  By default, if plot
  3862.  mode is activated (which is the default except for CLI-Batch mode),
  3863.  temporary spectrum file(s) are created automatically by GFFT for GNUPLOT
  3864.  and deleted when GFFT exits, so it is not necessary to give a Write
  3865.  command.  But if you would like to save the spectrum file, or if plot mode
  3866.  is not activated, you must specify an explicit spectrum file name before
  3867.  giving the OK command.  To return to the default (using automatically
  3868.  named temporary files), give the Write command without an argument.
  3869.  
  3870.  Note that spectral data will only be written after an OK command is given.
  3871.  
  3872.  Syntax:
  3873.  
  3874.      Write [<filename>]
  3875.      Write con:
  3876.  
  3877.  There are several reasons why you would use a Write command:
  3878.  
  3879.      (1) GNUPLOT uses the filename in the legend it creates to
  3880.          identify plotted lines.  You may wish to use a nicer name
  3881.          than the one automatically created for the temporary file.
  3882.  
  3883.      (2) You want to save spectral data files for later plotting or
  3884.          or other uses.
  3885.  
  3886.      (3) You wish to display the output data points on the console.
  3887.          Note that if you specify the device 'con:' as the spectral
  3888.          output data will be written to the console.  In this mode,
  3889.          it will not be possible to plot the data. 
  3890.   
  3891.  Note that if you perform more than one FFT without changing the Write
  3892.  name, the later data will, by default, overwrite the earlier data from the
  3893.  beginning.  If you would rather accumulate data in the same file (such as
  3894.  if you are computing a particular spectrum in bands), use the Open command
  3895.  (see) instead of the Write command.  If you would like to view several
  3896.  spectra in the same plot, use the CombinePlots command (see).
  3897.  
  3898.  Example:
  3899.  
  3900.      sys> gfft
  3901.  
  3902.      gfft> read whales.iff
  3903.      gfft> hann
  3904.      gfft> write whales-hann
  3905.      gfft> ok
  3906.      gfft> combineplots
  3907.      gfft> 74db
  3908.      gfft> write whales-74dB
  3909.      gfft> ok                 ;both whales-hann and whales-74db are plotted
  3910.  
  3911.  
  3912. ?Appendices
  3913.  
  3914.  The following appendices are present: code contributors, idea
  3915.  contributors, and financial contributors.
  3916.  
  3917.  
  3918. ?code contributors
  3919.  
  3920.  Code has been submitted by and accepted from...
  3921.  [See your name here...please contribute code, GOOD code.]
  3922.  [Please see README file for further details.]
  3923.  
  3924. ?Idea Contributors
  3925. ?References
  3926.  
  3927.  Just a few of the multitude who have developed the ideas behind this
  3928.  program can be listed here...
  3929.  
  3930.  Jean Baptiste Joseph Fourier...developer of the Fourier Series
  3931.  Danielson and C. Lanczos...FFT pioneers of the 1940's
  3932.  J.W. Cooley, J.W. Tukey, and R.L. Garwin of IBM...first to make the
  3933.    decimation-in-time FFT public, and in the public domain (YES!)
  3934.  N. Brenner of Lincoln Laboratories...refined the 'in-place' algorithm
  3935.  Julius Von Hann...developer of the Hann[ing] window
  3936.  Fredric J. Harris, window expert and refiner of the 'Blackman-Harris'
  3937.    window functions
  3938.  
  3939.  (Very much was learned from Press, et. al, below, listed in references) 
  3940.  Jay Miner and the other creators and developers of the Amiga computer
  3941.  Guido van Rossum for SOX and 'FAQ: Audio File Formats' (from which much
  3942.    was learned)
  3943.  David Champion for OmniPlay (from which some was learned)
  3944.  Malcolm Slaney and Ken Turkowski for ConvertFromIeeeExtended (from which
  3945.    some was learned)
  3946.  Richard M. Stallman and the Free Software Foundation, for GNU Emacs
  3947.    (which was used in the creation of this program), the GNU General
  3948.    Public License, and the GNU Manifesto
  3949.  Dennis M. Ritchie, for the C programming language (see references)
  3950.  The SAS Institute, Inc., for the SAS/C compiler  (A quality product)
  3951.  Thomas Williams, Colin Kelley, and innumerable contributors for
  3952.    Gnuplot
  3953.  Adrian Aylward and Robert Poole for POST version 1.86enh
  3954.  All the others whose work and vision has made this possible 
  3955.  
  3956.  REFERENCES:
  3957.  
  3958.  Commodore Amiga, Inc., 1992. 'Amiga ROM Kernel Reference Manual:
  3959.  Libraries, Third Edition' and 'Amiga ROM Kernel Reference Manual: Includes
  3960.  And Autodocs, Third Edition.'  (Reading, Massachusetts: Addison-Wesley
  3961.  Publishing Company)
  3962.  
  3963.  Fredric J. Harris,  1978. "On the Use of Windows for Harmonic Analysis
  3964.  with the Discrete Fourier Transform," Proceedings of the IEEE, vol. 66
  3965.  pp. 51-83.
  3966.  
  3967.  Brian W. Kernighan and Dennis M. Ritchie, 1988.  'The C Programming
  3968.  Language, Second Edition.'  (Englewood Cliffs, New Jersey: Prentice Hall)
  3969.  
  3970.  Press, Flannery, Teukolsky, and Vetterling, 1988.  'Numerical Recipes in
  3971.  C' (Cambridge UK and New York: Cambridge University Press), pp. 398- 470.
  3972.  
  3973.  SAS Institute, Inc., 1993.  SAS/C Development System User's Guide, Volumes
  3974.  1-3, Version 6.50.  (Cary, NC: SAS Institute, Inc.)
  3975.  
  3976. ?financial contributors
  3977.  
  3978.  Only a limited number of financial contributors, and ONLY those who give
  3979.  their EXPRESS permission will be listed here, and identifications may be
  3980.  limited in length (1-2 lines maximum) and/or edited.  Presence on this
  3981.  list DOES NOT constitute any form of endorsement either to the parties
  3982.  listed or from them to GFFT.  For the purposes of this list, purchasing
  3983.  services at minimum donations does not qualify.
  3984.  
  3985.  
  3986. ?Installation
  3987.  
  3988.  Installation instructions are included in a file named 'INSTALLATION.'
  3989.